插入排序-二分法-C++实现
来源:互联网 发布:淘宝哪家椰蒂好 编辑:程序博客网 时间:2024/05/21 08:03
#include "stdafx.h"#include <iostream>using namespace std;///@brief 二分法插入排序///@param[in][out] data[] 需要被排序的数组///@param[in] n 数组的长度///@param[in] 指定排序方式(升序(0)/降序(1))void InsertSort(int data[],int n,int flag){int key,left,middle,right;for (int j=1;j<n;j++){key=data[j];left=0;right=j-1;// 二分法寻找插入位置while (left<=right){middle=(left+right)/2;switch (flag){case 0://升序if (key<data[middle]){right=middle-1;} else{left=middle+1;}break;case 1://降序if (key>data[middle]){right=middle-1;} else{left=middle+1;}break;default:break;}}// 数据右移for (int i=j;i>left;i--){data[i]=data[i-1];}// 插入数据data[left]=key;}}int _tmain(int argc, _TCHAR* argv[]){int data[]={12,3,6,9,1234,6789,0,764,9,234};// 升序排列InsertSort(data,10,0);cout<<"升序排列:"<<endl;for (int i=0;i<10;i++){cout<<data[i]<<endl;}// 降序排列InsertSort(data,10,1);cout<<"降序排列:"<<endl;for (int i=0;i<10;i++){cout<<data[i]<<endl;}cin.get();return 0;}
程序输出:
升序排列:
0
3
6
9
9
12
234
764
1234
6789
降序排列:
6789
1234
764
234
12
9
9
6
3
0
算法分析:
1)稳定
2)空间代价:Θ(1)
3)时间代价:
插入每个记录需要Θ(log i)比较,最多移动i+1次,最少2次
最佳情况Θ(nlog n),最差和平均情况Θ(n^2)。
- 插入排序-二分法-C++实现
- java实现 二分法 插入排序
- 二分法插入排序(java实现)
- 自定义排序数组二分法插入实现
- 二分法插入排序的java简单实现
- 插入排序(包括二分法插入排序)-java实现
- 插入排序二分法插入排序
- C语言排序之二分法插入排序篇
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序代码
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 对进程个数计数
- EXTjs 中grid 中行的样式的添加和移除
- 一个整型数组里除了两个数字之外,其它的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- NewsCurve:值得拥有的媒体统计分析工具
- Spring整合Quartz(网上例子+自己配置)
- 插入排序-二分法-C++实现
- singleton模式
- 错排的简单理解
- 图片上传
- cxf wsdl2Java
- 第一篇文章
- 【转】程序员技术练级攻略
- 【Linux菜鸟成长记(十)】解决Windows的Java程序在ubuntu Eclipse下显示中文乱码
- My Sql中文字符问题