快速排序C语言

 

#include<stdio.h>
void swap(int a[],int low,int high){
	int temp=a[low];
	a[low]=a[high];
	a[high]=temp;
}

int CountPivot(int a[],int low,int high){
	int pivot=a[low];

	
while(low<high){				//注意当两指针重合时不满足while 
	while(low<high && a[high]>=pivot){//此处的low<high是防止右边向左移动次数过多导致小于low;左边第一个数字被当作pivot,则从右边比起 
		high--;					//大于枢纽值则不需要调换,只需把指针向左移动一个位置 
	}							//至于为何用while而不用if,可根据动画观察出例如第一次判断右边的值不需要调换,则会判断第二次第三次。因此用while。 
	swap(a,low,high);			//如果右边的数不大于枢纽值,则需要调换 。 
	while(low<high && a[low]<=pivot){
		low++;
	} 
	swap(a,low,high);
	
	}
	return low;			//两指针重合,返回pivot 
}

void QuickSort(int a[],int low,int high){
	if(low<high){
		int pivot=CountPivot(a,low,high);
		
		QuickSort(a,low,pivot-1);
		QuickSort(a,pivot+1,high);
	}
}

int main(){
		int i;
	    int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
	    int N=12;
	    QuickSort(a,0,N-1);
		for(int i=0;i<N;i++){
			printf("%d ",a[i]);
			
		} 

		return 0;
}

posted @ 2023-07-17 17:59  冷风5997  阅读(17)  评论(0编辑  收藏  举报