排序演算法之快速排序的實現

morning shine瀟發表於2020-12-18

幾種常見排序演算法(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]);
}

相關文章