数据结构排序之快速排序

             本来昨天晚上就可以把快速排序发上去,没想到昨晚CSDN竟然维护,那么就只能在停电的情况下下用学校的卡的要死的网发这快速排序了,不停多好,停电了还得自己掏腰包买个充电台灯,装的好像像学霸一样,实际就是一个大学渣,我也就不JJYY,直接说快速排序的思想,我是这样理解的,用一个变量作为基准,在拿出i和j两个变量,分别从数组的两端开始,将比它大的放在后面,小的放在前面,后续用递归的思想完成,这个效率还是很赞的,平均时间的复杂度为o(nlogn),对于常规的排序算法我看了书上的总结,和大家分享一下

1)当记录的规模小,直接插入排序较好,当直接选择移动的记录数少于直接插入时,应该选择直接选择排序

(2)看起来貌似记录初始状态有序,则应选用直接插入或者冒泡排序

(3)若记录比较大,大概扫一眼比较乱,果断上快速排序,没得商量,因为平均时间的复杂度为o(nlogn),时间最少

直接上代码吧

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void quicksort(int a[],int n)   // 实现排序的函数
{
    int i=0,j=n-1,k=a[i];
     
	if(n-1>0)   // 递归的终止条件
	{
		while(i<j)       //每一趟排序的终止条件
		{
			while(i<j&&a[j]>k)   //从左找第一个小于k的数
				j--;
			if(i<j)
				a[i++]=a[j];
			while(i<j&&a[i]<k)          //从右找第一个大于k的数
				i++;
            if(i<j)
				a[j--]=a[i];
       
		}
		a[i]=k;                   // 找到合适 的索引i存放K值
		quicksort(a,i-1);    // 左子序排序
		quicksort(a+i+1,n-i-1);   //右子序排序
	}
}
int main()          // 主函数
{
	int array[100];
	int i=0,n;
	srand ( (unsigned)time (NULL) );
    printf("请你输入要排序的个数: ");
	scanf("%d",&n);
	printf("随机产生%d个数: ",n);
	for(i=0;i<n;i++)
	{
		array[i]=rand()%10+10; //产生10~20之间的数
		printf("%d ",array[i]);
	}
	quicksort(array,n);   // 实现排序的函数
	printf("\n排序之后为:",n);
	for(i=0;i<n;i++)
	{
      printf("%d ",array[i]);
	}
    printf("\n");
	return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值