实现代码如下
#include <stdio.h>
#include <stdlib.h>
//用第一个元素将待排序序列划分成左右两个部分
int Partition(int S[], int low, int high){
int pivot = S[low]; //第一个元素作为基准元素
while(low < high){ //用Low、high搜索基准元素的最终位置。loW在左边,high在右边
while(low < high && S[high] >= pivot) //low在high左边且基准元素小于high指向的元素时
high--; //high左移直到high指向的元素小于基准元素
S[low] = S[high]; //high指向的元素比基准元素小时,元素移动到左边low指向的位置
while(low < high && S[low] <= pivot) //low在high左边且基准元素大于low指向的元素时
low++; //low向右移直到low指向的元素大于基准元素
S[high] = S[low]; //low指向的元素比基准元素大时,元素移动到右端high指向的位置
}
S[low] = pivot; //low==high时跳出循环,基准元素存放到最后确定的位置
return low; //返回存放基准元素的最终位置
}
//快速排序
void QuickSort(int S[], int low, int high){
if(low < high){ //跳出递归的条件
int pivotpos = Partition(S, low, high); //使用low和high划分左右表
QuickSort(S, low, pivotpos-1); //递归调用划分左子表,low值指向第一个元素位置,high指向上次排序最终位置,所以-1即可
QuickSort(S, pivotpos+1, high); //递归调用划分右子表,high值指向最后一个元素位置,low指向上次排序最终位置,所以+1即可
}
}
int main(){
int n;
printf("请输要排序数的个数:");
scanf("%d", &n);
int S[n];
printf("请输入要排序的数,使用空格隔开:");
for (int i = 0; i < n; i++){ //6 84 15 2 65 12 5 6 1 0
scanf ("%d", &S[i]);
}
QuickSort(S, 0 ,n-1);
printf("排序成功:");
for (int i = 0; i < n; i++)
{
printf("%d ",S[i]);
}
printf("\n");
system("pause");
}
运行结果
如有错误,请指正