直接插入排序

来源:互联网 发布:淘宝学习网 编辑:程序博客网 时间:2024/06/13 16:57

直接插入排序与希尔排序



希尔排序是直接插入排序的优化

直接插入排序思路:将一个数插入一个有序集合;最好时间效率O(N),最坏时间效率O(N2);
希尔排序思路:先进行预排序(与插入排序思路相同,就是gap开始大于1),预排序完将小值放在了前面,大值放在了后面,使数组接近有序;当gap=1时,进行插入排序;此时的插入排序O(N^1.25)---O(1.6*N^1.25);

代码如下:


<span style="font-size:18px;">#include<iostream>using namespace std;//希尔排序void ShellSort(int* arr, int len){if (arr == NULL && len <= 0)return;//int gap = len / 3 + 1;int gap = len;while (gap > 1){gap = gap / 3 + 1;for (int i = gap; i < len; ++i){int end = i - gap;int cur = arr[end + gap];//保存当前待插入的数据//挪动数据while (end >= 0 && arr[end] > cur){arr[end+gap] = arr[end];end -= gap;}arr[end + gap] = cur;}}}//直接插入排序void InsertSort(int* arr,int len){if (arr == NULL && len <= 0)return;for (int i = 0; i < len - 1; ++i){int end = i;int cur = arr[end + 1];//待插入的数据// 挪动数据while (end >= 0 && arr[end] > cur){arr[end + 1] = arr[end];--end;}arr[end + 1] = cur;}}void Print(int* arr, int len){if (arr == NULL && len <= 0)return;for (int i = 0; i < len; ++i){cout << arr[i] << " ";}cout << endl;}void TestInsertSort(){int array[10] = { 2, 9, 5, 8, 3, 6, 1, 7, 0, 4 };InsertSort(array, 10);Print(array, 10);}void TestShellSort(){int array[10] = { 2, 9, 5, 8, 3, 6, 1, 7, 0, 4 };ShellSort(array, 10);Print(array, 10);}</span>



测试结果如下图:



1 0
原创粉丝点击