氣泡排序最好的時間複雜度為 o(n)。
氣泡排序總的平均時間複雜度為 o(n^2)
氣泡排序演算法的原理如下:
1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
2.對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3.針對所有的元素重複以上的步驟,除了最後乙個。(比較 n-1 趟,每趟 n-1-i 次)
4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
void bubblesort(int arr,int n)
} }}
第一趟比較前兩個數,然後把第二個數按大小插入到有序表中;
第二趟把第三個資料與前兩個數從後向前掃瞄,把第三個數按大小插入到有序表中;
依次進行下去,進行了(n-1)趟掃瞄以後就完成了整個排序過程。
直接插入排序是由兩層巢狀迴圈組成的。外層迴圈標識並決定待比較的數值。
內層迴圈為待比較數值確定其最終位置。直接插入排序是將待比較的數值與它的前乙個數值進行比較,
所以外層迴圈是從第二個數值開始的。當前一數值比待比較數值大的情況下繼續迴圈比較,
直到找到比待比較數值小的並將待比較數值置入其後一位置,結束該次迴圈。
//方法一
void insertsort_1(int arr,int n)
}}//方法二
//a[0]哨兵位,假設a[1]已為排好序的,開始排序 //列印從arr[1]開始
void insertsort_2(int arr,int n)
arr[low]=arr[0];
} arr[0] = null;
}
希爾排序屬於插入類排序,是將整個有序序列分割成若干小的子串行分別進行插入排序。
排序過程:先取乙個正整數d1=1;div=div/2)//定增量div,並不斷減小
}}}
//快速排序
void qsort(int arr, int low, int high)
int first = low;
int last = high;
int key = arr[first];/*用字表的第乙個記錄作為樞軸*/
while(first < last)
arr[first] = arr[last];/*將比第乙個小的移到低端*/
while(first < last && arr[first] <= key)
arr[last] = arr[first];
/*將比第乙個大的移到高階*/
}arr[first] = key;/*樞軸記錄到位*/
qsort(arr, low, first-1);
qsort(arr, first+1, high);
}
第一次從r[0]~r[n-1]中選取最小值,與r[0]交換,第二次從r[1]~r[n-1]中選取最小值,
與r[1]交換,....,第i次從r[i-1]~r[n-1]中選取最小值,與r[i-1]交換,.....,
總共通過n-1次,得到乙個按排序碼從小到大排列的有序序列。
void selectsort(int arr, int n) }}
}
//堆排序
void swap(int *a, int *b);
void adjustheap(int param1,int j, int innums);
void heapsort(int nums, int innums);
//大根堆進行調整
void adjustheap(int param1, int j, int innums)
else
break;
}//put the value in the final position
innums[param1]=temp;
}//堆排序主要演算法
void heapsort(int nums,int innums)
//2.調整堆結構+交換堆頂元素與末尾元素
for (int j=nums-1;j>0;j--)
}
//歸併排序
void merge(int sourcearr,int temparr, int startindex, int midindex, int endindex)
while(i != midindex+1)
temparr[k++] = sourcearr[i++];
while(j != endindex+1)
temparr[k++] = sourcearr[j++];
for(i=startindex; i<=endindex; i++)
sourcearr[i] = temparr[i];}
//內部使用遞迴
void mergesort(int sourcearr, int temparr, int startindex, int endindex)
}
void main()
; int n = sizeof(arr)/sizeof(int);
//bubblesort(arr,n);
//insertsort_1(arr,n);
//insertsort_2(arr,n);
//binsort(arr,n);
//shellsort(arr,n);
//qsort(arr,0,n);
//selectsort(arr,n);
//heapsort(n, arr);
int brr[8];
mergesort(arr,brr, 0, n-1);
for(int i=0;i
C語言實現幾種常見排序演算法
worker.c created on 2010 7 1 author panfei include void swap int x,int y 插入排序 公升序 void insertsort int arr,int size arr j 1 to insert 選擇排序 降序 void sele...
幾種常見排序演算法的c語言實現
1 冒泡法1 其原理為從a 0 開始,依次將其和後面的元素比較,若a 0 a i 則交換它們,一直比較到a n 同理對a 1 a 2 a n 1 處理,即完成排序。cpp view plain copy void bubble int a,intn 2 冒泡法2 冒泡法還有第二種形式,或者叫沉底法也...
幾種常見排序演算法原理 C語言實現
以下各法均以從小到大排序為例,定義len為陣列array的長度 原理 比較相鄰元素的大小,對於每次迴圈,按排序的規則把最值移向陣列的一端,同時迴圈次數依次減少。c 實現 1.原理 先在未排序的陣列中找出最值,通過交換將其放在陣列第一位,然後再從剩餘的未排序陣列中找到另乙個最值,將其放在已排序陣列的末...