今天就寫個排序裏比較簡單的兩種算法:冒泡,選擇算法
思想:數組
冒泡就是每次循環都兩兩比較,小的話就交換數據,這樣一趟下來,最小的就選了出來,或者說是冒了出來。屢次循環後,數組即是有序數組。學習
選擇是從數組中選出一個小的,而後記錄下索引,到一次for循環後對比,判斷是否須要交換數據,屢次循環後,數組就是有序數組。spa
這兩個算法比較簡單,可是也很經典,因此在這就記錄下一篇。對於他們的時間複雜度,在不少排序中算是較差的,可是基礎思想仍是有學習的地方的,並且這兩個都是不穩定排序。下面直接上代碼,只作簡單參照:code
1 /* 2 *冒泡。選擇排序 3 *丁洋 4 */ 5 #include<stdio.h> 6 #include<stdlib.h> 7 /* 8 *交換 9 */ 10 void swap(int *i,int *j) 11 { 12 *i = *i ^ *j; 13 *j = *i ^ *j; 14 *i = *i ^ *j; 15 } 16 /* 17 *冒泡法 18 */ 19 void maop(int a[],int n) 20 { 21 int i,j; 22 char flag = 1;/*設置提早跳出的標誌*/ 23 for(i=0;i<n-1;i++) 24 { 25 flag = 1; 26 for(j=0;j<n-1-i;j++) 27 { 28 if(a[j] > a[j+1]) 29 { 30 swap(&a[j],&a[j+1]); 31 flag = 0; 32 } 33 } 34 if(flag) 35 break; 36 } 37 } 38 39 /* 40 *選擇法 41 */ 42 void select(int a[],int n) 43 { 44 int i,j,k; 45 for(i=0;i<n;i++) 46 { 47 k = i; 48 for(j=i+1;j<n;j++) 49 { 50 if(a[k] > a[j]) 51 k = j; 52 } 53 if(k != i) 54 swap(&a[k],&a[i]); 55 } 56 }
這個就簡單看看就好,沒什麼難度!blog