排序算法03------------快速排序

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),是線性級。

相關文章
相關標籤/搜索