C语言:用快速排序算法对一个数组进行排序
来源:互联网 发布:网络交流平台的优势 编辑:程序博客网 时间:2024/05/16 09:59
#include<stdio.h>#include<stdlib.h>#include<time.h>#define NUMBER 10//NUMBER为数组的大小 void quickSort(int [],int,int);void display(int [],int);int main(){ int num[NUMBER]; int randValue = 0; int i,temp; srand(time(NULL)); //随机生成NUMBER个1-100的随机数 for(i=0;i<NUMBER;i++) { randValue=1+(int)rand()%100; num[i]=randValue; } srand(time(NULL)); printf("使用快速排序算法\n"); printf("排序前:"); display(num,NUMBER);//打印数组内容 quickSort(num,0,NUMBER-1);//调用快速排序算法 printf("排序后:"); display(num,NUMBER); return 0;}void quickSort(int num[],int lower,int upper){ int partition(int [],int ,int); int pivot;//递归调用 pivot=partition(num,lower,upper); if(lower < pivot) quickSort(num,lower,pivot-1); if(pivot < upper) quickSort(num,pivot+1,upper);}int partition(int num[],int left,int right){ int pivot,temp; pivot = num[left]; while(left<right) { //从右往左扫描 while(num[right]>=pivot && left<right) right--; if(right!=left) { num[left]=num[right]; left++ ; } //从左往右扫描 while(num[left]<=pivot && left<right) left++; if(right!=left) { num[right]=num[left]; right--; } } num[left]=pivot; return(left);}//打印数组 void display(int num[],int count){ int i; for(i=0;i<count;i++) { printf("%d\t",num[i]); } printf("\n");}
快排利用递归调用,利用分治原理,把数组的第一个元素作为中心点,如按升序排列,则从右往前扫描,一直扫描,直到有把比中心点的赋值给左边的当前首位元素,再从左往右扫描。把中心点两侧分为两部分,再进行递归调用。