快排算法

快排算法比较基础,注意交换以及推进的策略(从后方找比标记值小的,从前方找比标记值大的)。每次把扫描的数组分成两份,递归下去就得到排序的数组。


#include <iostream>
#include <time.h>
//tdw
using namespace std;

int adata[100] = {0};//测试数据
void QuickSort(int nfirst, int nlast)//快排,nfirst-数组起始的索引,也是标记值。nlast-结束的数组索引
{
	if (nfirst >= nlast)
		return;
	int indexmark = nfirst;//标记的索引
	int i = nlast;//首先比较的是最后一个值
	bool bfindbig = true;//寻找比标记大的值,不交换
	int ncount = nlast - nfirst;//共需要比较的次数
	while (ncount-- > 0)
	{
		if ((bfindbig && adata[i] < adata[indexmark]) || (!bfindbig && adata[i] > adata[indexmark]))//一旦不满足前边比标记值小或者后边的比标记值大,就交换,
		{//(bfindbig && adata[i] < adata[indexmark]) 寻找比标记大的值,结果比标记值小,需要交换
			//(!bfindbig && adata[i] > adata[indexmark]) 寻找比标记值小的值,结果比标记值大,需要交换
			swap(adata[i], adata[indexmark]);
			swap(i, indexmark);
			bfindbig = !bfindbig;//交换搜索顺序  bfindbig == true  从后边搜索
		}
		bfindbig ? --i : ++i;
	}

	QuickSort(nfirst, indexmark - 1);
	QuickSort(indexmark + 1, nlast);
}
int main()
{
	srand(time(0));	
	for (int i = 0;i < 100;++i)
	{
		adata[i] = i+1;
	}
	for (int i = 0; i < 100;++i)
	{
		int temp = rand() % 100;
		swap(adata[i], adata[temp]);//随机打乱
	}

	QuickSort(0,99);
	for (int i = 0; i < 100;++i)
	{
		cout << adata[i] << " ";
	}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值