实例要求:
- 利用
rand()函数
随机生成范围在1~100
的18个整数值
- 并用
基于赋值
的快速排序的方法将这组数据进行降序排序
代码如下:
//快排的优化
#include<stdio.h>
#include<stdlib.h>
//方法2:基于赋值的快排
//控制一趟排序
int my_sort1(int *s,int low, int high){
int key = s[low]; //用第一个数据当做枢轴
while(low < high){ //从这组数据的两端交替向中间扫描
while(low < high && key >= s[high] ){
high--;
}
s[low] = s[high];
while(low < high && key <= s[low]){
low++;
}
s[high] = s[low];
}
s[low] = key;
return low; //返回枢轴所在的位置
}
//快速排序
int quick_sort1(int *p , int low, int high){
int kv = 0;
if(low < high){
//将组数据一分为二
kv = my_sort1(p,low,high); //算出枢轴值
//递归调用
quick_sort1(p,low,kv-1); //对数据较小的一组进行递归排序
quick_sort1(p,kv+1,high); //对数据较大的一组进行递归排序
}
}
void quick_print(int *p, int n){
for(int i = 0;i < n; i++){
printf("%d ",*(p+i));
}
printf("\n");
}
int main(int argc,const char *argv[]){
int a[18] = {0};
for(int i = 0;i < 18; i++){
//输入1~100的随机数
a[i] = rand()%100+1;
}
printf("快速排序前:\n");
quick_print(a,18);
quick_sort1(a,0,17);
printf("快速排序后:\n");
quick_print(a,18);
return 0;
}
运行结果: