快速排序总结

1.快速排序算法思想

快速排序的思想是在数组[p,r]中选择一个分区点q,将数组一分为2,同时将小于分区点的数值的放到分区点左侧[p,q-1],大于分区点的数值的放到分区点右侧[q+1,r],重复这个过程。

2.具体算法代码

//第一部分:排序算法
//9-1 快速排序
//2020.09.20 
void QuickSort(int arr[],int low,int high)
{
	int temp;
	int i=low,j=high;
	if(low<high)
	{
		temp=arr[low]; //在每个子程序开始时,把arr[low]的值赋给temp
		while(i<j)
	  { 
		while(i<j&&arr[j]>=temp) --j;//把j往左移动,一直移动到i=j或者arr[j]<temp的位置 
		if(i<j)//用arr[j]的值覆盖arr[i]的值 
		{
			arr[i]=arr[j];
			i++;
		}
		while(i<j&&arr[i]<temp) ++i;//执行此处时,要把arr[i]往右移动,找到一个arr[i]>temp的值,然后覆盖arr[j] 
		if(i<j)
		{
			arr[j]=arr[i];
			j--;
		}
	  }
	  arr[i]=temp;//该算法实现的巧妙之处就在于,数组中是有n个值的,找一个temp来记录一个值,然后覆盖 
	  QuickSort(arr,low,i-1);//分治法求解左边部分 
	  QuickSort(arr,i+1,high);//分治法求解右边部分		
	} 
} 

3.复杂度分析

  1. 时间复杂度:最好:O(n log2 n),最坏:O(n^2),平均:O(n log2 n)(很优秀)
  2. 空间复杂度:O(n log2 n)
  3. 稳定性:不稳定
    举例:6,8,7,6,3,5,9,4,在经过第一次分区操作之后,两个6的顺序会变,所以快速排序不是稳定排序算法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值