C语言学习之基于赋值的快速排序

该代码示例展示了如何使用C语言的rand()函数生成1到100之间的18个随机整数,然后通过基于赋值优化的快速排序算法进行降序排序。程序通过递归调用快速排序函数实现排序,并提供了打印数组功能来展示排序前后的结果。
摘要由CSDN通过智能技术生成

实例要求:

  • 利用rand()函数随机生成范围在1~10018个整数值
  • 并用基于赋值的快速排序的方法将这组数据进行降序排序

代码如下:

//快排的优化 
#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;
} 

运行结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值