C++快速排序,分治递归思想

 c++快排算法,自己用来做笔记,时间原因写的比较乱,可以参考一下。

int array[] = { 60, 68, 59, 52, 72, 28, 96, 33, 24 };
012345678
606859527228963324

        原始数组,现在的实现思想就是取一个基准,从右边开始找比基准小的,往左边放, 右边就空了一个位置,需要

从左边找比基准大的往右边空位置放。依次填空,补空。

 

012345678
 6859527228963324

        首先取区间第一数a[0]=60为基准,设置x = a[0]=60,所以a[0]相当于空了,需要来找数组右边i = 8到i=0比基准小的数字来填充。

 

012345678
2468595272289633 

        右边比x=60小的就是j = 8 的数array[8]=24,所以 a[0]=a[8]=24,

        所以a[8]就空了   此时j = 8

 

012345678
24 59527228963368

      所以找到a[1] = 68比x = 60 大,a[8] = a [1] = 68

      此时i= 1 ,a[1]为空,所以需要从j=8开始找比x=60小的数

 

012345678
24335952722896 68

      找到a[1] = a[7] = 33

     a[7] 空, ,j = 7,从i=1开始找比60大的数

 

012345678
24335952 28967268

       a[7] = a[4] =72

         i = 4,a[4] 空

      

   

012345678
2433595228 967268

    a[4] = a[5]=28,a[5]空

    j = 5

    从 i = 4 开始找比60大的数 就是i = j =  5 终止循环

  所以把 x= 60填入a[5]中

 

012345678
243359522860967268

     所以这是第一次循环把所有大于60的数都放到右边,小于的数都放到了左边

 

   然后继续在 l,到 i -1之间 执行以上步骤

                     i+1 ,r到之间执行以上步骤

void quick_sort2(int a[], int low, int high)
{
	if (low >= high)
	{
		return;
	}
	int first = low;
	int last = high;
	int key = a[first];/*用字表的第一个记录作为枢轴*/

	while (first < last)
	{
		while (first < last && a[last] >= key)
		{
			last--;
		}
		a[first] = a[last];/*将比第一个小的移到低端*/
	
		while (first < last && a[first] <= key)
		{
			first++;
		}

		a[last] = a[first];
		/*将比第一个大的移到高端*/
 	}
	a[first] = key;/*枢轴记录到位*/
	quick_sort2(a, low, first - 1);
	quick_sort2(a, first + 1, high);
}
int main()
{
	int array[] = { 60, 68, 59, 52, 72, 28, 96, 33, 24 };
	int length = sizeof(array) / sizeof(int);
	quick_sort2(array, 0, length - 1);
	for (int i = 0; i < length; i++)
	{	
		cout << array[i]<< endl;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值