排序算法总结---希尔排序
2014-12-06 09:09
155 查看
希尔排序是对直接插入排序算法的改进,改进的着眼点在于:①.若带排序记录按关键码基本有序,直接插入排序的效率很高;②.由于直接插入排序算法简单,则在待排序记录个数较少时效率也很高。
希尔排序的基本思路是:
先将整个待排序记录分割成若干个子序列,在子序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。
要解决的问题:
(1).应该如何分割待排序的记录,才能保证整个序列逐步向基本有序发展;
(2).子序列内如何进行直接插入排序。
问题(1)的解决:
问题(2)的解决:
均是以diff为跳跃单位:
整个算法和测试的代码如下:
希尔排序的基本思路是:
先将整个待排序记录分割成若干个子序列,在子序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。
要解决的问题:
(1).应该如何分割待排序的记录,才能保证整个序列逐步向基本有序发展;
(2).子序列内如何进行直接插入排序。
问题(1)的解决:
for(d=n/2;d>=1;d/=2) { //以d为增量,在子序列内进行直接插入排序 }
问题(2)的解决:
均是以diff为跳跃单位:
int i, j; int diff; for (diff = len / 2; diff >= 1;diff/=2) { for (i = diff; i < len;i++) { int temp = array[i]; for (j = i - diff; j >= 0 && temp < array[j]; j-=diff) array[j + diff] = array[j]; array[j + diff] = temp; } }
整个算法和测试的代码如下:
#include <iostream>
#include <cstdlib>
using namespace std;
void InsertSort(int *array, int len)
{
if (array == NULL || len < 0)
{
return;
}
int i, j; int diff; for (diff = len / 2; diff >= 1;diff/=2) { for (i = diff; i < len;i++) { int temp = array[i]; for (j = i - diff; j >= 0 && temp < array[j]; j-=diff) array[j + diff] = array[j]; array[j + diff] = temp; } }
}
void show(int *array, int len)
{
for (int i = 0; i < len; i++)
{
cout << array[i] << " ";
}
cout << endl;
}
void main()
{
int array[] = { 7, 6, 5, 4, 3, 2, 1, -1 };
int len = sizeof(array) / sizeof(array[0]);
InsertSort(array, len);
show(array, len);
system("pause");
}
相关文章推荐
- 排序算法总结(四)希尔排序
- 排序算法总结-插入排序、希尔排序、堆排序、快速排序
- 各种排序算法总结----基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 数据结构与算法:七种排序算法总结(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序、快速排序)
- 排序算法总结---希尔排序
- Java排序算法总结之希尔排序
- 排序算法总结(5)——希尔排序
- 排序算法总结-插入排序、希尔排序、堆排序、快速排序
- 排序算法总结之希尔排序 Shell Sort
- 排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)
- 排序算法总结之希尔排序
- 排序算法总结之希尔排序
- 排序算法总结之希尔排序
- 各排序算法总结(简单选择,冒泡,快速,希尔排序,堆排序)
- 排序算法总结之希尔排序
- 排序算法总结(一)---- 直接插入排序,希尔排序(java实现)
- 排序算法总结之希尔排序
- 各种排序算法的总结和比较
- 八种排序算法总结
- 排序算法总结