直接插入排序

来源:互联网 发布:手机淘宝联盟如何提现 编辑:程序博客网 时间:2024/05/12 21:17

标准版以数组第一个元素为辅助空间:

void sort(double a[],int n){    for (int i = 2; i < n; ++i){           a[0]=a[i];        int j;        for(j=i;a[0]<a[j-1];j--){    //找寻插入位置           a[j]=a[j-1];              //将比a[0]大的元素后一一位         }           a[j]=a[0];                  //找到插入位置后,将a[0]插入      }}

也可设置一个变量为辅助空间:

void sort(double a[],int n){        for (int i = 1; i < n; ++i)        {               double key=a[i];   //取key值            for(int j=i;key<a[j-1];j--){                a[j]=a[j-1];                a[j-1]=key;            }                   }    }

两种方法最好与最坏情况时间复杂度相同,
最好情况:全部有序且为正序,时间复杂度为O(n)
最坏情况:全部有序且为逆序,时间复杂度为O(n 2)

测试用例

#include <iostream>using namespace std;void sort(double a[],int n){        for (int i = 1; i < n; ++i)        {               double key=a[i];   //取key值            for(int j=i;key<a[j-1];j--){                a[j]=a[j-1];                a[j-1]=key;            }                   }        for (int i = 0; i < n; ++i)        {            cout<<a[i]<<" ";        }    }int main(){    double num[10];    for(int i=0;i<10;i++){        cin>>num[i];    }    sort(num,10);    return 0;}
#include <iostream>using namespace std;void sort(double a[],int n){    for (int i = 2; i < n; ++i){           a[0]=a[i];        int j;        for(j=i;a[0]<a[j-1];j--){    //找寻插入位置           a[j]=a[j-1];              //将比a[0]大的元素后一一位         }           a[j]=a[0];                  //找到插入位置后,将a[0]插入      }    for(int k=1;k<n;k++){            cout<<a[k]<<" ";    }}int main(){    double num[10];    for(int i=1;i<10;i++){        cin>>num[i];    }    sort(num,10);    return 0;}
0 0
原创粉丝点击