c++ 排序算法 希尔排序 代码详细解释

参考:算法第四版
在这里插入图片描述

代码:

#include<iostream>
#include<ctime>
using namespace std;
void Individual(int A[], int size)
{
	srand((unsigned)time(NULL));
	for (int i = 0; i < size; i++)
		A[i] = rand() % 100;
}
void Output(int A[], int size)
{
	cout << endl;
	for (int i = 0, j = 0; i < size; i++)
	{
		cout << A[i] << " ";
		j++;
		if (j == 10)
		{
			cout << endl;
			j = 0;
		}

	}
	cout << endl;
}
void swap(int A[], int i, int j)
{
	int t = A[i];
	A[i] = A[j];
	A[j] = t;
}
//希尔排序
/*
1、使数组间隔h有序  ,插入排序实现
2、缩小h执行步骤1,直至h为1,
*/
void ShellSort(int A[], int size)
{
	int h = 1;
	//h可以取的值:1 , 4 , 4*3+1=13 , 40  , ......
	while (h < size / 3)
	{
		h = 3 * h + 1;
	}
	while (h >= 1)
	{
		//将数组变为h有序  , 两个for循环组成插入排序   相隔h的元素后者大于前者则相互交换,从后往前迭代
		for (int i = h; i < size; i++)
		{
			for (int j = i; j >= h && A[j] < A[j - h]; j -= h)
				swap(A, j, j - h);
		}
		h = h / 3;
	}
}

int main()
{
	int n;
	cout << "请输入要排序的数组大小:" << endl;
	cin >> n;
	int* array = new int[n];
	Individual(array, n);

	Output(array, n);

	ShellSort(array, n);

	Output(array, n);

	delete[] array;
	return 0;
}

小结:

希尔排序是最早突破o(n^2)阶的排序算法,他仅仅是把插入排序改了改就完成了算法的改进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值