經典算法系列四----冒泡與選擇排序

今天就寫個排序裏比較簡單的兩種算法:冒泡,選擇算法

思想:數組

冒泡就是每次循環都兩兩比較,小的話就交換數據,這樣一趟下來,最小的就選了出來,或者說是冒了出來。屢次循環後,數組即是有序數組。學習

選擇是從數組中選出一個小的,而後記錄下索引,到一次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

相關文章
相關標籤/搜索