荷兰国旗排序问题对应的快速排序方法

    荷兰的国旗是由红、白、蓝三种,问题为时间复杂度为o(n)的情况下,按颜色依次排为红、白、蓝三种。

代码的逻辑如下,并不复杂,所占用的空间复杂度为o(1)

  

int *Test::Sort(int *k, int counts)
{
	int j = 0, i = 0,n=counts-1;
	while (j<=n)
	{
		switch (k[j])
		{
		case 0:
			swap(k[i], k[j]);
			i++; j++;
			break;
		case 1:
			j++;
			break;
		case 2:
			swap(k[j], k[n]);
				n--;
				break;
		}
	}
	return k;
}

红白蓝三种情况,如果再考虑一次的话其实是对应的大于、小于和等于三种情况。可以用这种方法实现对快排的改版,挑选出比关键字大的和小的数,分别放在左边和右边。但是相比快速排序partition方法,不易找出初始值,(这里的查找方法逻辑比较杂,通过判断两个数是否是需要交换的数,是的话则重新对关键字赋值。其实比较逻辑可以放在swap方法中,这里就不在赘述了。)

int *Test::Compare_Sort(int *k,int low,int high)
{
	 int j = 0, i = 0, n = high;
         int keys=low;
    int index = k[low]; int values;
    while (j <= n)
    {
      
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值