排序_Shell_Sort(希尔排序)更正版
2012-11-09 15:59
513 查看
希尔排序,可以更正的一点就是,增量是设计成偶数,还是设计成奇数,还是不用去管它,是什么样就是什么样呢?
通过看前任的研究,可以发现,增量设计成奇数是可以减少点计算量的,但效果也不会很明显.呵呵,不过,做知识还是要严谨一些比较好.
贴出代码:
通过看前任的研究,可以发现,增量设计成奇数是可以减少点计算量的,但效果也不会很明显.呵呵,不过,做知识还是要严谨一些比较好.
贴出代码:
#include <stdio.h> #include <string.h> #include <math.h> #include <iostream> #include <string> #include <algorithm> using namespace std; int N; int a[1000]; void Shell_Sort ()//关于希尔排序的增量为奇数好还是为偶数好,上网查了查是奇数好,次数会少点,自己研究不出来为什么 //是奇数好,但是都这样说,自己就只能按照奇数的增量来分组了. { int d = (N >> 1) % 2 == 0? N >> 1 + 1 : N >> 1; //注意这里,一定要让增量变成是奇数 while (d > 0) { for (int i = d; i < N; i++) { int j = i - d; int t = a[i]; while (j >= 0 && t < a[j]) { a[j + d] = a[j]; j -= d; } a[j + d] = t; } for (int i = 0; i < N; i++) { cout << a[i] << " "; } cout << endl;
if (d == 1) break; //这个是非常重要的...晕,前面写错了...也没有检查出来,因为要估计到奇数就会少算很多次数,就得加这一句话.要不然是死循环的; d = (d >> 1) % 2 == 0 ? d >> 1 + 1 : d >> 1; //也要注意这里 也要保证增量是奇数. } } int main() { cout << "Input the number that you want be sorted : " << endl; cin >> N; cout << "Please input the numbers: " << endl; for (int i = 0; i < N; i++) { cin >> a[i]; } Shell_Sort (); for (int i = 0; i < N; i++) { cout << a[i] << " "; } cout << endl; system ("pause"); return 0; }
相关文章推荐
- Java基础知识强化57:经典排序之希尔排序(ShellSort)
- uva 10152 ShellSort 龟壳排序(希尔排序?)
- uva 10152 ShellSort 龟壳排序(希尔排序?)
- 排序之希尔排序(Shell Sort)
- 希尔排序(shellsort)又叫增量递减排序(diminishing increment)
- PHP Array -- PHP 排序 -- 希尔排序(Shell Sort)
- 【DS】排序算法之希尔排序(Shell Sort)
- 无聊写排序之 ---- 希尔排序(ShellSort)
- 排序--希尔排序的实现(shellsort)
- C++实现谢尔排序(希尔排序)(shell sort)
- 排序1+3:基数排序(RadixSort),希尔排序(ShellSort)和快速排序(QuickSort)
- 排序1+3:基数排序(RadixSort),希尔排序(ShellSort)和快速排序(QuickSort)
- 排序——希尔排序(Shell Sort)
- 插入排序之希尔排序(Shell Sort)
- 排序_Shell_Sort(希尔排序)
- [排序] 希尔排序(Shell Sort)
- 排序 —— 希尔排序(Shell sort)
- 【排序算法 】希尔排序 shell sort(插入类排序)
- 《shell下sort排序命令的使用》
- 【每日一题(25)】初等排序算法(2) 希尔排序(shell sort)