希尔排序:
Shell Sort 是改进直接插入排序的一种插入排序,又叫缩小增量排序法,其选择一组逐渐缩小的增量对待排数据进行分组排序,因为其可以大跨度的交换 2 个数据,所以其算法复杂度为 O(nlogn);因为一次增量排序就是跨度为 d 的直接插入排序,所以一次增量排序是稳定的原址排序,但是整个希尔排序是不稳定的非原址排序
Shell Sort 适合 n 比较大的数据
给定实例的shell排序的排序过程
假设待排序文件有10个记录,其关键字分别是:
49,38,65,97,76,13,27,49,55,04。
增量序列的取值依次为:
5,3,1
排序过程:
源代码:
#include <iostream> using namespace std; void shellSort(int map[],int length,int d); int main(){ int map[1000]; int number; cin >> number; for(int i = 0;i < number;i ++){ cin >> map[i]; } shellSort(map,number,number / 2); for(int i = 0;i < number;i ++){ cout << map[i] << " "; } cout << endl; } void shellSort(int map[],int length,int d){ for(int i = 0;i <= length - d;i ++){ for(int j = i + d;j <= length - 1;j ++){ if(map[j] < map[j - d]){ int temp = map[j]; map[j] = map[j - d]; map[j - d] = temp; } } } int dT = d / 2; if(dT == 0) return; shellSort(map,length,dT); }
时间: 2024-10-12 23:23:09