直接插入排序与折半排序

来源:互联网 发布:php 分班问题 编辑:程序博客网 时间:2024/06/04 18:18
直接插入排序的代码实现:#include<iostream>using namespace std;int a[20];void sort(int n){for(int i=2;i<=n;i++){int j; if(a[i]<a[i-1]){a[0]=a[i];//a[0]用来暂时储存a[1]及a[1]之后的所有数字。 a[i]=a[i-1];//至少先移动一次。 for( j=i-2;a[0]<a[j];j--){a[j+1]=a[j];}a[j+1]=a[0];}}for(int m=1;m<=n;m++){cout<<a[m]<<endl;}}int main(){int n;cin>>n;for(int i=1;i<=n;i++){int b;cin>>b;a[i]=b;}sort(n);}折半插入排序的代码实现:
#include<iostream>using namespace std;int main(){int b[20];int a[20];int n;cin>>n;for(int i=1;i<=n;i++){cin>>b[i];}a[1]=b[1];int low;int hign;for(int i=2;i<=n;i++) { low=1; hign=i-1; a[0]=b[i]; while(low<=hign) {     int m=(low+hign)/2; if(a[m]<a[0]) { low=m+1;    } else { hign=m-1; }}for(int j=i-1;j>=hign+1;j--){a[j+1]=a[j];}a[hign+1]=a[0]; } for(int k=1;k<=n;k++) { cout<<a[k]<<endl;  }  return 0;}
注意折半插入排序的过程即先查找应插入元素所在的位置就hign+1,然后移动数组中元素的位置,最后插入需要插入的元素。
在查找过程中即利用了折半查找查找失败的情况来找到插入元素应在的位置。


0 0
原创粉丝点击