Shell排序法(十二)

冒泡排序、选择排序和插入排序都是一些效率比较低的排序算法,对于有大量数据的排序,Shell排序算法算是一种有效率的算法。

Shell排序法中最后一步是插入排序,又称为希尔排序或者缩小增量排序。

算法流程:

1、将有n个元素的数组分成n/2个序列,第一个数字与第n/2+1个数字配对,作为一个序列对,后面的数字也一样进行配对,形成序列对;

2、循环一次将所有的序列对进行比较,该交换的进行交换,排好序;

3、然后分成n/4个序列,按上面的一样进行排序;

4、不断重复上面的过程,直到只有一个序列对时,进行插入排序点击打开链接;

假设有N个数据:

1 3 5 4 2

第一步:1和4,3和2形成序列对,进行比较,排序;

1 2 5 4 3

第二步:因为N/4=1,所以进行插入排序;


【核心代码】

void ShellSort(int *a,int len)
{
	int i, j, h;
	int r, temp;
	int x = 0;
	for (r=len/2;r>=1;r/=2)//r>=1保证至少有两个可以比较的数,r/=2确定序列对
	{
		for (i=r;i=0&&temp
【代码示例】

// c++算法之shell排序算法.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
//#include 
#include 
#include 
#include 

void ShellSort(int *a,int len)
{
	int i, j, h;
	int r, temp;
	int x = 0;
	for (r=len/2;r>=1;r/=2)//r>=1保证至少有两个可以比较的数,r/=2确定序列对
	{
		for (i=r;i=0&&temp> SIZE;
	int *arr = new int[SIZE];
	
	srand(time(NULL));
	for (i=0;i
【演示结果】

Shell排序法(十二)_第1张图片



你可能感兴趣的:(《数据结构与算法》)