插入排序
来源:互联网 发布:特别搞笑的网络歌曲 编辑:程序博客网 时间:2024/06/05 00:49
直接插入排序与折半插入排序:
#include <iostream>using namespace std;//直接插入排序void InsertSort(int *arr,int size){ int j; if(!arr) return ; for (int i=1;i<size;i++) { int tmp = arr[i]; for (j = i-1; j>=0 && tmp < arr[j];j--) { arr[j+1] = arr[j]; } arr[j+1] =tmp ; }}/// 二分插入排序void BInsertSort (int * arr,int size){ if(!arr) return ;for (int i =1 ;i<size ;i++) { int tmp = arr[i]; //二分查找来确定欲插入元素的应在位置 int low =0,high = i-1 ,mid ; while (low<= high) { mid= (low+high)/2; if(arr[i]<arr[mid]) high = mid-1; else low = mid +1 ; } for (int j =i-1 ;j>=low;j--) { arr[j+1]= arr[j]; } arr[low]= tmp ; }}void output(int *a, int len){ for(int i = 0; i < len; ++i) { cout << a[i] << " "; } cout << endl;}int main(){ int a[] = {6, 9, 1, 3, 6, 8, 9, 4}; int len = sizeof(a) / sizeof(int); output(a, len); InsertSort(a,len); output(a, len); BInsertSort(a,len); output(a, len);}
希尔排序:
#include <iostream>#include <stdlib.h>using namespace std;void ShellInsert(int *arr ,int size ,int delta){ int j; for (int i = delta;i<size;i++) { int tmp = arr[i]; for (j = i-delta; j>=0 && tmp < arr[j];j-=delta) { arr[j+delta] = arr[j]; } arr[j+delta] = tmp ; }}void ShellSort(int * arr,const int size){ if(!arr) return ; int increment = size ; do { increment = increment/3 +1; ShellInsert(arr,size,increment); } while(increment>1);}void output(int *a, int len){ for(int i = 0; i < len; ++i) { cout << a[i] << " "; } cout << endl;}int main(){ int a[] = {6, 9, 1, 3, 6, 8, 9, 4}; int len = sizeof(a) / sizeof(int); output(a, len); ShellSort(a,len); output(a, len);}
0 0
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 关于iOS传值的总结----属性传值
- 0126 Flume-ng+Kafka+storm的学习笔记
- iOS 9检测QQ、微信是否安装无效的解决方法
- 页面按F5刷新,避免表单重复提交的解决方法
- log4j.properties
- 插入排序
- OC深复制和浅复制
- 使用myeclipse web browser 中文显示乱码
- Session对象的特点
- Android系统启动过程
- WPF 让Border显示外阴影
- Message解析
- ListView原理分析之重要方法介绍
- Haskell : Functionally Solving Problems 部分学习笔记