shell排序特点:
- 插入排序的优化
- 步长(开始设置步长为元素个数除以2)
- 步长此排序:每次排序完步长减一 每次排序都以步长为间隔给所有元素分组,组内做插入排序。
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<list>
#define NUM 10
void shell(int* arr, int len )
{
//for (int i = 0; i < len; i++)
//{
// for (int j = i+1; j < len; j++)
// {
// if (arr[i] > arr[j])
// {
// int temp = arr[i];
// arr[i] = arr[j];
// arr[j] = temp;
// }
// }
//}
int step = len / 2;
while (step >= 1)
{
for (int i = step; i < len; i++)
{
int temp = arr[i];
int j = i - step;
while (j >= 0 && arr[j] > temp)
{
//数据后移
arr[j+step] = arr[j];
j -= step;
}
arr[j + step] = temp;
}
step--;
}
}
void print(int * arr ,int len )
{
for (int i = 0; i < len; i++)
{
cout << arr[i]<<" " ;
}
cout << endl;
}
int main()
{
int arr[NUM] = { 96,5,87,9,5,6,85,-8,8,7 };
int len = sizeof(arr) / sizeof(arr[0]);
shell(arr, len);
print(arr, len);
system("pause");
return 0;
}