二分法插入排序

来源:互联网 发布:java表示一个数的次方 编辑:程序博客网 时间:2024/05/11 20:52
输入 一个 n  输入n个数字  对这n个数字 进行排序


#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>

using namespace std;
int Find(int T[],int n)
{
    freope
    int a=1,b=n-1;
    T[0]=T[n];      //找到最后一个大于等于T【0】的  为 a 然后 把它T【a+1】 =T【a】 T【a】=T【0】;
    while(a<b)
    {
        if(T[(a+b)/2]==T[0])   a=b=(a+b)/2;
        else if(T[(a+b)/2]>T[0])  b=(a+b)/2 ;        //******* 
        else if(T[(a+b)/2]<T[0])  a=(a+b)/2+1 ;
    }
    for(int i=n;i>a;i--)  T[i]=T[i-1];
    T[a]=T[0];
}

int main()
{
      int n;             //待排序 数量
      cin>>n;
      int T[n+1];
      for(int i=1;i<=n;i++)
        cin>>T[i];
      for(int i=2;i<=n;i++)
      {
          if(T[i]<T[i-1])    Find(T,i);
      }
        for(int j=1;j<=n;j++)  cout<<T[j]<<" ";
        cout<<endl;
}