常用的排序算法

希尔排序

希尔排序就是多层次的直接插入排序。用来把较小的元素先扔到队列前面,减少后续的排序复杂度,读懂了希尔排序就是读懂了直接排序

#include <iostream>
#include <vector>
using namespace std;
void shell_sort(std::vector<int> &nums)
{
    int n = nums.size();
    for(int gap = n/2;gap>=1;gap =(gap/2))//定义排序分组的长度,以1/2缩小,gap=1时为直接排序
    {
        for(int start = 0;start < gap;start++)//start:每一个排序组的首位索引
        {
            for(int i = (start + gap);i < n;i+=gap)//i是目前要进行排序的目标数
            {
                for(int j = (i-gap); j>=start;j-=gap)//j是已经排列好的数字部分中的数索引,当目标数比它小的时候,就要交换两个数,把它丢到前面去
                {
                    if(nums[j] > nums[j+gap])
                        swap(nums[j],nums[j+gap]);
                    else
                        break;
                }
            }
        }
    }
}
int main() {
	vector<int> nums{{2,343,21,43,64,67,321,354,32,332,4,456}};
	shell_sort(nums);
	for(auto ele:nums)
	{
	    cout<<ele<<" ";
	}
	return 0;
}

选择排序

void SelectSort(int* a,size_t n)
{
	assert(a);
	int begin = 0;
	int end = n-1;
	while ( begin < end )
	{
		int min = begin,max = begin;
		for(int i = begin; i <= end; ++i)
		{
			if( a[min] > a[i] )
				min = i;
			if( a[max] < a[i] )
				max = i;
		}
		swap( a[min],a[begin] );
		if( max == begin )//如果首元素是最大的,则需要先把min 和 max的位置一换,再交换,否则经过两次交换,又回到原来的位置
			max = min;
		swap( a[max],a[end] );
		begin++;
		end--;
	}
}
版权声明:本文为CSDN博主「YAIMZA」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37941471/article/details/80710099
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值