思想:從待排序元素中的第乙個開始,每乙個依次與後面的所有元素作比較,再交換值。
#include
intmain()
;int i,j,t;
for(i=
0; i<
10; i++
)//從第乙個開始}}
for(i=
0; i<
10; i++
)printf
("arr[%d] = %d\n"
,i,arr[i]);
return0;
}
優化:
我們不能減少比較次數,但是可以減少交換次數,比而不換,記錄下標,與後面所有元素比較完後,再來交換值。
#include
intmain()
;int i,j,t,idx;
for(i=
0; i<
10; i++
)//從第乙個開始}if
(idx != i)
//idx != i,假設不成立,交換最小下標所在元素和當前元素的值
}for
(i=0
; i<
10; i++
)printf
("arr[%d] = %d\n"
,i,arr[i]);
return0;
}
思想:每次從頭開始,依次比較相鄰元素,再交換。經過一輪比較後,就已經確定好最後乙個元素的值。再進行下一輪比較,已經排好的最後乙個元素就可以不參加排序了。
圖示:
如何確定i,j邊界:
n個數,經過一輪比較後,會排好最後乙個元素,當只剩兩個數未排好時,又經一輪過後,最後乙個數排好的同時,第乙個數也已經排好,所只需要n-1輪比較就能全部排好。所以外重迴圈i#include
#define n 10
intmain()
;int i,j,t;
for(i=
0; i
1; i++)}
}for
(i=0
; i)printf
("%d\n"
,arr[i]);
return0;
}優化:
當出現在比完一輪或兩輪,這組資料已經變得有序了,後面的每輪比較都不會再交換值了,也就沒有意義了,我們就可以提前結束迴圈。
#include
#define n 10
intmain()
;int i,j,t;
int flog =1;
//定義乙個標誌
for(i=
0; i
1; i++)}
if(flog)
break
;//若flog為1,則意味著這一輪比較沒有再交換值,說明已經有序,提前結束迴圈。
}for
(i=0
; i)printf
("%d\n"
,arr[i]);
return0;
}
選擇排序法和氣泡排序法
例題 自定義函式,從鍵盤輸入n個數,對它進行從小到大的排序,要求從主函式輸出排序的結果。方法一 氣泡排序法 include define n 10 using namespace std int main void bubble sort int a 氣泡排序法分析 先從第乙個元素開始,各位相鄰元素...
選擇排序法和氣泡排序法
1.選擇排序法 以從小到大排序為例 演算法思想 a.在未排序序列中找到最小 大 元素,存放到排序序列的起始位置 b.從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾 c.以此類推,直到所有元素均排序完畢 選擇排序法 演示 用c語言實現選擇排序法 include intmain vo...
氣泡排序法 選擇排序法
相鄰兩個數進行比較 如果前者比後者大 就把前者和後者互換 比如十個數 經過九次比較 就可以得到乙個最大的數字於排列的最末端 再經過八次比較 可以得到乙個第二大的數 依次類推 即最大的數一次一次冒泡上來。include int main printf n 資料排序 for i 0 i 9 i 列印資料...