1.以前介紹的冒泡和選擇排序都是適用於少許的數據,一旦數據量比較大,效率就很低的,由於他們的時間複雜度是O(n²)。算法
2.今天介紹一種算法不是很難,速度很快的排序算法,快速排序。ui
一 快速排序spa
1)經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按此方法對這兩部分數據分別進行快速排序,code
整個排序過程能夠遞歸執行。blog
2)排序過程動圖(來自百度百科)排序
3)步驟:遞歸
(1)設置兩個變量 i,j,令i=0,j=n-1io
(2) 選擇一個元素做爲分割點(key),一般選第一個元素,令key=arrary[0]
class
(3) 從j開始向前搜索,即由後開始向前搜索(j--),找到第一個小於key的值A[j],將A[j]和A[i]的值交換
效率
(4) 從i開始向後搜索,即由前開始向後搜索(i++),找到第一個大於key的A[i],將A[i]和A[j]的值交換
(5) 重複第三、4步,直到i==j。此時排序完成
二 代碼
1 #include<stdio.h> 2 void quickSort(int *arr,int left,int right) 3 { 4 int i,j,temp; 5 i=left; 6 j=right; 7 if(i==j)//遞歸結束條件 8 return; 9 temp=arr[left]; 10 while(j>i) 11 { 12 while(j>i&&arr[j]>=temp) 13 j--; 14 arr[i]=arr[j]; 15 while(i<j&&arr[i]<=temp) 16 i++; 17 arr[j]=arr[i]; 18 } 19 arr[j]=temp; 20 quickSort(arr,0,i);//遞歸執行,對左半分進行排序 21 quickSort(arr,i+1,right);//遞歸執行,對右半分進行排序 22 } 23 int main() 24 { 25 int i; 26 int arr[10]={1,3,-9,0,10,2,8,9,19,-1}; 27 quickSort(arr,0,9);//選擇排序 28 for(i=0;i<10;i++) 29 printf("%d\n",arr[i]); 30 return 0; 31 }
快速排序是冒泡排序的一種改進,的時間複雜度是O(nlog₂n),是線性級。