經典排序 氣泡排序法與選擇排序法

2022-07-30 15:06:23 字數 1274 閱讀 9541

例題:fjutoj 1842

氣泡排序 (bubble sort)

原理是取相鄰兩個數進行大小比較,判斷是否交換。

以從小到大排序為例,氣泡排序就像氣泡一樣,最小的數慢慢浮上來,最大的數慢慢沉下去。那麼完整從頭到尾做一次之後最後一位就是原序列中最大的數字了。然後只需要對1~(n-1)個數字進行排序,完成後倒數第二個數字也為原序列的1~n-1元素中最大的值。如此重複,進行n-1次一定能完成排序。參考**:

1 #include 2

void bubblesort(int *, int);3

intmain()

4, i;

6int s = sizeof(a) / sizeof(int

);7 puts("

before sort:");

8for(i = 0; i < s; i++)

9 printf("

%d "

, a[i]);

10bubblesort(a, s);

11 puts("

\nafter sort:");

12for(i = 0; i < s; i++)

13 printf("

%d "

, a[i]);

14return0;

15}16void bubblesort(int *a, int

s) // a為待排序陣列 s為陣列中需排序長度

1729}30

}31 }

優化:如果一整趟下來都沒有一次交換,那麼確定該序列已經滿足單調,直接跳出迴圈可以省時。

1

void bubblesort(int *a, int

s) // a為待排序陣列 s為陣列中需排序長度217

}18if(swap_flag == 0) break;19

}20 }

選擇排序 (select sort)

以從小到大排序為例。原理是在序列中挑乙個最小的值,然後與序列中的第乙個交換。那麼,第乙個就是整個序列中最小的數字。再對從第二個數字開始的序列做這個操作,得到剩餘序列中最小的數字所在位置,與原序列第二個數交換,以此類推做n-1完成排序。參考**:

void selectsort(int *a, int

s) // a為待排序陣列 s為陣列中需排序長度

if(min_num_index !=i)

}}

氣泡排序法 選擇排序法

相鄰兩個數進行比較 如果前者比後者大 就把前者和後者互換 比如十個數 經過九次比較 就可以得到乙個最大的數字於排列的最末端 再經過八次比較 可以得到乙個第二大的數 依次類推 即最大的數一次一次冒泡上來。include int main printf n 資料排序 for i 0 i 9 i 列印資料...

選擇排序法和氣泡排序法

例題 自定義函式,從鍵盤輸入n個數,對它進行從小到大的排序,要求從主函式輸出排序的結果。方法一 氣泡排序法 include define n 10 using namespace std int main void bubble sort int a 氣泡排序法分析 先從第乙個元素開始,各位相鄰元素...

選擇排序法和氣泡排序法

思想 從待排序元素中的第乙個開始,每乙個依次與後面的所有元素作比較,再交換值。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 優化 我們不能減少比較次數,但...