排序演算法之快速排序的實現
幾種常見排序演算法(c語言)
一、選擇排序
二、氣泡排序
三、插入排序
四、快速排序
快速排序
快速排序是以分治法的思想,將陣列分為大小兩部分,然後再將兩部分再進行大小分類,依次遞迴,最終達到排序效果。是氣泡排序的改良版,平均時間複雜度:O(N*logN)
流程圖如下(來源網路)
程式碼如下:
/*快速排序*/
#include <stdio.h>
#define N 10
int sz;
void quick_sort(int a[],int zuo,int you){
if(zuo<you){
int left=zuo,right=you;/*定義left,right兩個"游標",用於前後遍歷陣列*/
int s=a[zuo];/*每次將最左邊的那個數作為基準數*/
while(left<right){
while(left<right&&a[right]>=s){/*從右往左遍歷,找到第一個小於基準數s的位置right*/
right--;
}
a[left]=a[right];/*將right對應的數給left對應的游標位置值*/
while(left<right&&a[left]<=s){
left++;
}
a[right]=a[left];/*將left對應的數給right對應的游標位置值*/
}
a[left]=s;/*當一趟結束後,left>=right時候,s的值一直沒變都是s[0],將s的值給left對應的地方*/
/*遞迴呼叫*/
quick_sort(a,zuo,left-1);
quick_sort(a,left+1,you);
}
}
void main(){
int a[N]={12,32,222,42,24,1,2,43,433,11},i;
printf("排序前:");
for(i=0;i<N;i++)
printf("%d ",a[i]);
quick_sort(a,0,N-1);/*呼叫快速排序函式*/
/*傳進去zuo=0,you=9*/
printf("\n快速排序後:");
for(i=0;i<N;i++)
printf("%d ",a[i]);
}
相關文章
- python排序演算法的實現-快速排序Python排序演算法
- 排序演算法之 '快速排序'排序演算法
- 排序演算法-Java實現快速排序演算法排序演算法Java
- 快速排序(quicksort)演算法實現排序UI演算法
- js實現兩種實用的排序演算法——冒泡、快速排序JS排序演算法
- 快速排序的實現排序
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- 演算法之快速排序演算法排序
- 排序之快速排序排序
- 看動畫學演算法之:排序-快速排序動畫演算法排序
- 演算法之常見排序演算法-氣泡排序、歸併排序、快速排序演算法排序
- Python之排序演算法:快速排序與氣泡排序Python排序演算法
- 快速排序演算法C++實現排序演算法C++
- bash shell 實現快速排序演算法排序演算法
- 排序演算法__快速排序排序演算法
- 排序演算法:快速排序排序演算法
- 排序演算法-快速排序排序演算法
- 排序演算法——快速排序排序演算法
- 排序演算法 - 快速排序排序演算法
- php實現 歸併排序,快速排序PHP排序
- 畫江湖之演算法篇【排序演算法】快速排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 快速排序演算法排序
- 排序演算法之「快速排序(Quick Sort) _c++ 」排序演算法UIC++
- GO 實現快速排序Go排序
- 快速排序 java實現排序Java
- Swift實現快速排序Swift排序
- java實現快速排序Java排序
- 快速排序(java實現)排序Java
- #排序演算法#【4】快速排序排序演算法
- 《排序演算法》——快速排序(Java)排序演算法Java
- 快速排序演算法(C語言實現)排序演算法C語言
- Go實現氣泡排序和快速排序Go排序
- “chaos”的演算法–之快速排序薦演算法排序
- 資料結構和演算法(Golang實現)(25)排序演算法-快速排序資料結構演算法Golang排序
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 排序演算法:Java實現希爾排序排序演算法Java
- Python實現的快速排序Python排序
- 快速排序(Quicksort)的Javascript實現排序UIJavaScript