小白成长之路(5)--插入排序(直接插入,二分插入,希尔排序)
来源:互联网 发布:我的世界泰拉瑞亚js 编辑:程序博客网 时间:2024/06/08 06:01
#include <iostream>using namespace std;//插入排序(1)--直接排序,最差时间复杂度O(n^2)//最好时间复杂度O(n),平均时间复杂度O(n^2),//稳定,空间复杂度O(1)void insertSort(int a[], int len) { int i, j, key; for (i = 1; i < len; ++i) { key = a[i]; for ( j = i - 1; j >= 0; --j) { if (a[j] > key) a[j + 1] = a[j]; else break; } a[j + 1] = key; }}//插入排序(2)--二分插入排序,,时间复杂度O(n^2)void binsertSort(int a[], int len) { int i, j; int low, high, mid; int key; for (i = 1; i < len; ++i) { key = a[i]; low = 1; high = i - 1; while (low <=high) { mid = (low + high) / 2; if (key < a[mid]) { high = mid - 1; } else low = mid + 1; } for (j = i - 1; j >= high + 1; j--) { a[j + 1] = a[j]; a[high + 1] = key; } }}//插入排序(3)--希尔排序,最优时间复杂度O(n)//最差时间复杂度O(n^2),平均时间复杂度O(nlog2N)//不稳定,空间复杂度O(1)void shellSort(int array[], int len) { int i, j, gap; for (gap = len / 2; gap > 0; gap /= 2) {//步长 for (i = 0; i < gap; i++) { for (j = i + gap; j < len; j += gap) { if (array[j] < array[j - gap]) { int temp = array[j]; int k = j - gap; while (k > 0 && array[k] > temp) { array[k + gap] = array[k]; k -= gap; } array[k + gap] = temp; } } } }}void printOr(int array[], int len) { for (int k = 0; k < len; k++) { cout << array[k] << ","; }}//输出1void printFin_1(int array[], int len) { for (int i = 0; i < len; ++i) { cout << array[i] << ","; } cout << endl;}//输出2void printFin_2(int array[], int len) { for (int i = 0; i < len; ++i) { cout << array[i] << ","; } cout << endl;}//输出3void printFin_3(int array[], int len) { for (int i = 0; i < len; i++) { cout << array[i] << ","; } cout << endl;}int main() { int array[] = { 4,8,7,11,2,25,27,1,18 }; int len = sizeof(array) / sizeof(int); cout << "The orginal array is:" << endl; printOr(array, len); insertSort(array, len); cout << "The insertsorted array is:" << endl; printFin_1(array, len); binsertSort(array, len); cout << "The binsertsorted array is:" << endl; printFin_2(array, len); shellSort(array, len); cout << "The shellsorted array is:" << endl; printFin_3(array, len); cin.get();}
运行结果:
阅读全文
0 0
- 小白成长之路(5)--插入排序(直接插入,二分插入,希尔排序)
- 内部排序之插入排序(直接插入排序,二分插入排序,希尔插入排序)
- 插入排序(直接插入、二分插入、希尔排序)
- 插入排序(希尔排序、直接插入、折半插入排序)
- 直接插入排序,二分(折半)插入排序,希尔插入排序
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- java数据结构之插入排序(直接插入排序、折半插入排序、希尔排序)
- 【排序】插入排序(直接插入排序、希尔排序)
- 【排序一】插入排序(直接插入排序&&希尔排序)
- //插入排序 直接插入排序 二分插入排序 2-路插入排序 表插入排序 希尔排序
- 排序法系列之二----插入排序(直接插入,希尔排序,二分插入,链表插入排序)的C++代码实现
- 插入排序(直接插入排序、希尔排序)
- 算法-排序-插入排序(直接插入和希尔排序)
- 插入排序(直接插入排序和希尔(shell)排序
- 插入排序(直接插入排序与希尔排序)
- 插入排序(直接插入排序 and 希尔排序)
- 插入排序(直接插入排序、希尔排序)
- 插入排序(直接插入排序,希尔排序)
- 详解zabbix安装部署(Server端篇)
- ISFP职业规划,“做事情想一出是一出,不行了再换”的28岁ISFP女孩
- RxJava
- VTK图形处理之自定义纹理映射Filter
- 设计模式六大原则(3):依赖倒置原则
- 小白成长之路(5)--插入排序(直接插入,二分插入,希尔排序)
- 这样的一个不带头节点的循环双链表哪里出错了呢
- 凛冬将至
- digest介绍
- <学习html>第一天笔记-浏览器内核、web标准、html标准语法格式
- 安装paramiko遇到的问题
- C#窗体应用程序 vs + sql server2008连接举例,简单的学生信息管理系统 补充注册页面,如有侵权,请联系本人删除
- 安装Ubuntu16.04(64)后的常用软件的安装
- RHCSA考试题练习