数据结构与算法:希尔排序的C++实现

任务:用C++实现希尔排序

代码如下:

#include <iostream>
#include <vector>

#define num 10

using namespace std;


void Print(int a[], int len);//打印数组信息

void Insert_Sort(int a[], int len);//简单插入排序算法(从小到大排序)

void Shell_Sort(int a[], int len);//希尔排序(从小到大排序)

int main()
{
	int a[num] = { 6,23,-5,89,65,23,45,68,0,-45 };

	//打印初始数组a
	cout << "before sort: ";
	Print(a, num);

	//希尔排序
	Shell_Sort(a, num);

	//打印排序后的数组a
	cout << "after sort: ";
	Print(a, num);

	while (1);
	return 0;
}

//打印数组信息
void Print(int a[], int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << a[i] << " ";
	}

	cout << endl;
}

//简单插入排序算法(从小到大排序)
void Insert_Sort(int a[], int len)
{
	int temp;
	int j;

	for (int i = 1; i < len; i++)
	{
		temp = a[i];
		j = i - 1;
		while (j >= 0 && a[j] > temp)
		{
			a[j + 1] = a[j];
			j--;
		}
		a[j + 1] = temp;
		Print(a, 10);
	}
}

//希尔排序算法(从小到大排序)
void Shell_Sort(int a[], int len)
{
	int temp;
	int j;
	
	//定义增量gap
	int gap = len/2;

	while (gap >= 1)
	{
		for (int i = gap; i < len; i++)
		{
			temp = a[i];
			j = i - gap;
			while (j >= 0 && a[j] > temp)
			{
				a[j + gap] = a[j];
				j-=gap;
			}
			a[j + gap] = temp;
			Print(a, 10);
		}

		//每次循环完成,增量减半
		gap = gap / 2;
	}	
}

猜你喜欢

转载自blog.csdn.net/weixin_44928892/article/details/109064639