shell排序和快速排序
2014-12-11 21:36
176 查看
1.直接上代码(shell)
2.快速排序
思想:1)先从数列中取出一个数作为基准数;
2)分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边;
3)再对左右区间重复第二步,直到各区间只有一个数。
原文地址:/article/1389268.html
void shellsort1(int a[], int n) { int i, j, gap; for (gap = n / 2; gap > 0; gap /= 2) //步长,,,,分组的次数 for (i = 0; i < gap; i++) //每次分组的组数(要执行直接插入排序的次数等于分组的组数)==gap个(可以验算一下),即有gap组都要进行直接插入排序 { for (j = i + gap; j < n; j += gap) //需要进行直接插入排序的元素,以下皆和直接插入排序一致,只不过把1全部换成了gap if (a[j] < a[j - gap]) { int temp = a[j]; int k = j - gap; while (k >= 0 && a[k] > temp) { a[k + gap] = a[k]; k -= gap; } a[k + gap] = temp; } } }
2.快速排序
思想:1)先从数列中取出一个数作为基准数;
2)分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边;
3)再对左右区间重复第二步,直到各区间只有一个数。
void quick_sort(int s[], int l, int r) { if (l < r) { //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1 int i = l, j = r,; int x = s[l]; while (i < j) { while(i < j && s[j] >= x) // 从右向左找第一个小于x的数 j--; if(i < j) //确保是因为找到了小于x的元素才退出的循环,而非i>=j退出的循环,<strong><u>这是一个很重要的技巧,当&&来判断循环是,要执行下面的语句,我们通常要确认循环退出的条件(为了以防万一)。</u></strong> s[i++] = s[j]; while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数 i++; if(i < j) s[j--] = s[i]; } s[i] = x; quick_sort(s, l, i - 1); // 递归调用 quick_sort(s, i + 1, r); } }
原文地址:/article/1389268.html
相关文章推荐
- 排序--选择排序,插入排序,冒泡排序,shell排序,快速排序(递归,迭代,改进版本),归并排序
- 数据结构与算法之--高级排序:shell排序和快速排序
- 8 排序--选择排序,插入排序,冒泡排序,shell排序,快速排序(递归,迭代,改进版本),归并排序
- c++实现数据结构中的各种排序方法:直接插入、选择,归并、冒泡、快速、堆排序、shell排序
- EOJ 1807 快速排序
- 利用qsort() 对字符串的内容快速排序
- scala数据结构和算法-04-快速排序实现
- 《C算法》——快速排序
- 快速排序(转)
- 快速排序
- 快速排序(Quicksort)的Javascript实现
- 排序算法系列七(希尔排序也称shell排序)
- 排序 quick_sort 快排 算法 随机函数 rand() 快速排序的随机化版本
- Array.Sort和快速排序
- [C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章
- 数据结构——快速排序原理及算法Java实现
- Java 排序之 快速排序
- 排序算法复习(Java实现)(三): 插入,冒泡,选择,Shell,快速排序
- Java单链表实现快速排序
- 利用系统函数qsort()进行快速排序的七种形式