快速排序
快速排序算法首先会在序列中选择一个基准值(pivot),将除基准值以外的数分为“比基准值大的数”和“比基准值小的数”。
步骤
a. 先从数列中取出一个数作为基准数。
b. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
c. 再对左右区间重复第二步,直到各区间只有一个数。
#include<stdio.h> void QuickSort(int *arr,int low,int high) { if(low>=high) { return ; } int pivot=arr[low]; //选择最左边的为基准值 int i=low; //需要用i,j来表示low和high的变化 int j=high; while(i<j) { while(i<j && arr[j]>=pivot) //排除右边比基准值大的数 { j--; } arr[i]=arr[j]; while(i<j && arr[i]<=pivot) //排除左边比基准值小的数 { i++; } arr[j]=arr[i]; } arr[i]=pivot; //此处i是最终基准值对应的下标 //return low; //函数数据类型是void没有返回值 QuickSort(arr,low,i-1); //排好基准值左边 QuickSort(arr,i+1,high); //排好基准值右边 } int main() { int arr[]={0,4,3,5,65,2,64,68,34,94,53,74,13}; int len=sizeof(arr)/sizeof(arr[0]); printf("待排序数值:"); for(int i=0;i<len;i++) { printf("%d ",arr[i]); } printf("\n"); printf("快速排序后的数值:"); QuickSort(arr,0,len-1); for(int i=0;i<len;i++) { printf("%d ",arr[i]); } printf("\n"); return 0; }
浙公网安备 33010602011771号