插入排序和希尔排序
来源:互联网 发布:手机淘宝店铺分享链接 编辑:程序博客网 时间:2024/06/05 00:44
插入排序
排序思路:每次将一个待排序的元素与已排序的元素进行逐一比较,直到找到合适的位置按大小插入。
第一趟比较示图:
实现:
#include <iostream>#include <iomanip>using namespace std;//插入排序void InsertionSort(int a[], int n){int i, j;int temp;for (i = 1; i < n; i++){temp = a[i];for (j = i; j > 0 && a[j-1] > temp; j--){a[j] = a[j-1];}a[j] = temp;for (int k = 0; k < n; k++){cout << setw(4) << a[k] ;}cout << endl;}}int main(){int a[] = {15, 9, 8, 1, 4, 11, 7, 12, 13, 6, 5, 3, 16, 2, 10, 14}; int n = sizeof(a) / sizeof(int); for (int k = 0; k < n; k++){ cout << setw(4) << a[k] ;}cout << endl;cout << "排序情况: " << endl; InsertionSort(a, n);cout << endl;return 0;}
希尔排序:
在上面这幅图中:
初始时,有一个大小为 10 的无序序列。
在第一趟排序中,我们不妨设 gap1 = N / 2 = 5,即相隔距离为 5 的元素组成一组,可以分为 5 组。
接下来,按照直接插入排序的方法对每个组进行排序。
在第二趟排序中,我们把上次的 gap 缩小一半,即 gap2 = gap1 / 2 = 2 (取整数)。这样每相隔距离为 2 的元素组成一组,可以分为 2 组。
按照直接插入排序的方法对每个组进行排序。
在第三趟排序中,再次把 gap 缩小一半,即gap3 = gap2 / 2 = 1。 这样相隔距离为 1 的元素组成一组,即只有一组。
按照直接插入排序的方法对每个组进行排序。此时,排序已经结束。
需要注意一下的是,图中有两个相等数值的元素 5 和 5 。我们可以清楚的看到,在排序过程中,两个元素位置交换了。
实现:#include <iostream>#include <iomanip>using namespace std;//希尔排序void Shellsort(int a[], int n){int i, j, gap;int temp;for (gap = n / 2; gap > 0; gap = gap / 2)for (i = gap; i < n; i++){temp = a[i];for(j = i; j >= gap; j = j - gap){if (a[j-gap] > temp){a[j] = a[j-gap];}else break;}a[j] = temp; for (int k = 0; k < n; k++) { cout << setw(4) << a[k] ; } cout << endl;} }int main(){int a[] = {15, 9, 8, 1, 4, 11, 7, 12, 13, 6, 5, 3, 16, 2, 10, 14}; int n = sizeof(a) / sizeof(int); for (int k = 0; k < n; k++){ cout << setw(4) << a[k] ;}cout << endl;cout << "排序情况: " << endl; Shellsort(a, n);cout << endl;return 0;}运行结果:
阅读全文
0 0
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 希尔排序和插入排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 插入排序和希尔排序
- 深入理解CSS元素可见性visibility及应用场景
- Develop ROS in MATLAB (Matlab Robotics Toolkit): Hello_world
- java工程为什么加一个biz层
- ZUFE2483 DO IT YOURSELF
- uft对各浏览器版本支持
- 插入排序和希尔排序
- linux:vi 替换命令
- Android之IntentService使用及源码分析
- mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用
- 生成内部订单BAPI
- 嵌入式Linux系统设计--第一章:绪论
- postfix+mysql接收邮件+空壳服务器
- 编程第七十天
- 算法导论程序39--最优二叉搜索树(Python)