數據結構(排序一)

排序算法

  影響算法性能的幾個因素:時間性能,輔助空間,算法的複雜度性能

冒泡排序spa

  • 從頭開始比較相鄰兩元素的大小(大的放後面),從頭比較到尾時就肯定了尾部是最大值,循環n-1次就肯定了後n-1個記錄的順序正確,剩下的頭,這時當也正確了
  • 改進:增長一個標準,用於判斷此次循環中有沒有交換數據,若沒有就代表已經排序完畢,不須要再繼續進行沒必要要的循環
 1 void BubbleSort(int a[],int n){
 2     int i,j,flog=1,k;
 3     for(i=0;i<n-1 && flog;i++){
 4         flog=0;
 5         for(j=0;j<n-i-1;j++){
 6             if(a[j]>a[j+1]){
 7                 flog=1;
 8                 k=a[j];
 9                 a[j]=a[j+1];
10                 a[j+1]=k;
11             }
12         }
13     }
14 }

選擇排序code

  • 選擇排序的中心思路是找出最小值放在頭部,而後再找出次小值放在次頭部,由此早出n-1此最大值就排出應有順序
 1 void SelectSort(int a[],int n){
 2     int i,j,min,k;
 3     for(i=0;i<n-1;i++){
 4         min=i;
 5         for(j=i+1;j<n;j++)
 6             if(a[min]>a[j])
 7                 min=j;
 8         k=a[min];
 9         a[min]=a[i];
10         a[i]=k;
11     }
12 }

直接插入排序blog

  • 直接插入排序的中心思路是把一個記錄插入到一個有序表中,插入後依舊保持有序表有序,長度加一
 1 void InsertSort(int a[],int n){
 2     int i,j,temp;
 3     for(i=1;i<n;i++){
 4         if(a[i]<a[i-1]){
 5             temp=a[i];
 6             //注:這裏要手動檢測越界問題 
 7             for(j=i-1;a[j]>temp && j>=0;j--)
 8                 a[j+1]=a[j];
 9             a[j+1]=temp;
10         }
11     }
12 }
相關文章
相關標籤/搜索