一 插入排序(insertsort和shellsort)
2013-06-06 15:18
399 查看
一 插入排序:
(1)基本思想:将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。
*简单,记录数量较小时比较高效。
(2)复杂度:
*空间:一个记录的辅助空间。
*时间:N2.
(3)其他:
*折半插入排序:减少关键字比较次数,但记录的移动次数不变,时间复杂度仍然是N2.
二 希尔排序(又称缩小增量排序):
(1)基本思想:先将整个带排记录序列分割成为若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。
*shellsort基于两点对插入排序进行改进:当带排记录基本有序时插入排序效率可大大提高;当n较小时,插入排序效率也比较高。
(2)增量序列(多种取法):
*应使增量序列中的值除了1之外没有其他公因子,并且最后一个增量值必须等于1。
*目前尚未有最好的增量序列。时间复杂度与增量序列相关。
三 代码如下:
(1)shellsort:
(2)insertsort:
(1)基本思想:将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。
*简单,记录数量较小时比较高效。
(2)复杂度:
*空间:一个记录的辅助空间。
*时间:N2.
(3)其他:
*折半插入排序:减少关键字比较次数,但记录的移动次数不变,时间复杂度仍然是N2.
二 希尔排序(又称缩小增量排序):
(1)基本思想:先将整个带排记录序列分割成为若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。
*shellsort基于两点对插入排序进行改进:当带排记录基本有序时插入排序效率可大大提高;当n较小时,插入排序效率也比较高。
(2)增量序列(多种取法):
*应使增量序列中的值除了1之外没有其他公因子,并且最后一个增量值必须等于1。
*目前尚未有最好的增量序列。时间复杂度与增量序列相关。
三 代码如下:
(1)shellsort:
#include<iostream> #include<vector> using namespace std; void sort(vector<int> &vec,int i) { int size=vec.size(); int j=i+1; for(;j<size;++j) { int k=j; vec[0]=vec[k]; for(k-=i;k>0&&vec[0]<vec[k];k-=i)//注意这里 vec[k+i]=vec[k]; vec[k+i]=vec[0]; } } void shell(vector<int> &vec,int dist)//需对dist进行处理,这里省略. { for(;dist>0;--dist) sort(vec,dist); } void print(const vector<int> &vec) { int length=vec.size(),i=1; while(i<length) cout<<vec[i++]<<endl; } int main() { vector<int> vec; vec.push_back(0); int data; int dist; cout<<"distance:"<<endl; cin>>dist; cout<<"data:"<<endl; while(cin>>data) vec.push_back(data); shell(vec,dist); print(vec); }
(2)insertsort:
#include<iostream> #include<vector> using namespace std; void insert(vector<int> &vec) { int i=2,length=vec.size(); for(;i<length;++i) { vec[0]=vec[i]; int j=i-1; for(;vec[0]<vec[j];--j)//vec[0] 是哨兵 所以不需判断j>0 vec[j+1]=vec[j]; vec[j+1]=vec[0]; } } void print(const vector<int> &vec) { int length=vec.size(),i=1; while(i<length) cout<<vec[i++]<<endl; } int main() { vector<int> vec; vec.push_back(0); int data; while(cin>>data) vec.push_back(data); insert(vec); print(vec); }
相关文章推荐
- Insert Sort & Shell Sort(插入排序和希尔排序)
- 插入排序(InsertSort)
- 【算法】插入排序 insert sort algorithm
- [排序] 插入排序(Insert Sort)
- c语言数组五种排序法:bubble,choise,quick,insert,shell 和js 数组排序sort的区别
- 算法与数据结构--插入排序(InsertSort)
- 插入排序(insertSort)
- 经典排序算法 INSERT-SORT: 插入排序
- scala 实习插入排序(Insert_sort)
- 插入排序 insert_sort
- 插入排序 (Insert Sort)
- InsertSort(插入排序)
- 无聊写排序之 ---- 插入排序(insert Sort)
- InsertSort(插入排序)
- 排序1+2:交换排序(ExchangeSort),选择排序(SelectSort)和插入排序(Insertsort)
- 插入排序(insert sort)
- c++算法联系,冒泡排序,bubble sort,插入排序,insert sort,
- 插入排序(InsertSort)
- 插入排序(Insert_Sort)
- 数据算法之插入排序(insertSort)的Java实现