快速排序

概要:
快速排序(Quicksort)是对 冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以 递归进行,以此达到整个数据变成有序 序列
方法:
对于下列数组arr:

选一个中间量:

int v=arr[1]=4;

经过一次快速排序之后:


之后再对v<4,和v>4的两部分进行递归快速排序,最后就完成了对数组的排序。

步骤:(针对以上数组)

1:取一个中间变量:int v=arr[1];  j=1;i=2;



2:arr[i]<v--->swap(arr[i],arr[j+1]),j++,i++;


3:arr[i]>v----->i++;


4:arr[i]>v----->i++;


5:arr[i]<v--->swap(arr[i],arr[j+1]),j++,i++;


6:arr[i]<v--->swap(arr[i],arr[j+1]),j++,i++;


7:arr[i]>v----->i++;


8:最后一步:将v与arr[j]交换:swap(arr[1],arr[j]);


这样就完成了一次快速排序,接下就是利用递归对<v,>v两部分再进行快速排序。

注意:要对着arr[i.....j],arr[j+1....8]两部分进行递归,每次必须return j;这个位置。

代码:
#include<iostream>
using namespace std;

int partition(int arr[], int l, int r) {

	int v = arr[l];
	int j = l;

	for (int i = l + 1; i <= r; i++)
		if (arr[i] < v) {
			j++;
			swap(arr[j], arr[i]);
		}

	swap(arr[l], arr[j]);
	//返回j的位置
	return j;
}

void quickSort(int arr[], int l, int r) {

    if( l >= r )
	       return;

	int p = _partition2(arr, l, r);
	quickSort(arr, l, p - 1);
	quickSort(arr, p + 1, r);
}



int main() {

	int arr[8] = { 4,3,7,8,2,1,6,5 };
	quickSort(arr,0,7);
	 
	for (int i = 0; i < 8; i++)
	{
		cout << arr[i] << " ";
	}
	return 0;
}

结果:



优化:

优化一:随机化快排

优化二:三路快排

总结:认真领悟


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值