Description用函数实现折半插入排序,并输出每趟排序的结果.输入格式第一行:键盘输入待排序关键的个数n 第二行:输入n个待排序关键字,用空格分隔数据输出格式每行输出一趟排序结果,数据之间用一个空格分隔输入样例10 5 4 8 0 9 3 2 6 7 1输出样例4 5 8 0 9 3 2 6 7 1 4 5 8 0 9 3 2 6 7 1 0 4 5 8 9 3 2 6 7 1 0 4 5 8 9 3 2 6 7 1 0 3 4 5 8 9 2 6 7 1 0 2 3 4 5 8 9 6 7 1 0 2 3 4 5 6 8 9 7 1 0 2 3 4 5 6 7 8 9 1 0 1 2 3 4 5 6 7 8 9
折半插入排序和直接插入排序是类似的,它们之间的区别在于找插入位置的方法。
直接插入排序从后往前一个一个找,折半插入排序利用折半查找(也就是二分查找)来找插入位置,因此当数据量比较大的时候折半插入排序的效率比直接插入排序要高。
但本人觉得直接插入排序看起来更简单一点
下面是直接插入排序和折半插入排序的代码,我把它们放一块了,方便比较。
#include#include #include #include #include using namespace std; int n,a[100005]; void print() { for(int i=1;i<=n;i++) cout << a[i] << ' '; cout << endl; } void zhijie(int a[]) { int i,j; for(i=2;i<=n;i++) { if(a[i]=high+1;j--) a[j+1]=a[j];//后移 a[high+1]=a[0]; print(); } } int main() { cin >> n; for(int i=1;i<=n;i++) cin >> a[i]; //zhijie(a); //cout << endl; zheban(a); return 0; }



