1. 程式人生 > >C++程式碼,資料結構-內部排序-插入排序-直接插入排序

C++程式碼,資料結構-內部排序-插入排序-直接插入排序

開始內部排序的學習,

直接插入排序還是很簡單的

#include<iostream>
#include<cstdlib>
using namespace std;
//第十章 內部排序


//待排記錄資料的資料結構
#define maxsize 20

struct Sqlist
{
int r[maxsize];
int length;
};


int buildsq(Sqlist &sq){//建立要排序的陣列
int x;
cin>>x;
sq.length=x+1;


for(int i=1;i<=x;++i)
{
cin>>sq.r[i];
}
return x;


}


//插入排序
//直接插入排序 演算法10.1
void insertsort(Sqlist &ql){//把第一個元素作為已經排序好的序列從第二個元素開始插入到前面已經排序好的序列。
for(int i=2;i!=ql.length;++i){//從第二個元素開始
    if(ql.r[i]<ql.r[i-1]){//如果此元素小於前面一個元素
        ql.r[0]=ql.r[i]; // 把該值先記錄在0位置上
        ql.r[i]=ql.r[i-1];//把前一個元素賦值給該位置。
        int j;
       for( j=i-2;ql.r[0]<ql.r[j];--j){//用此元素與更前面的元素開始比較,插入到第一個比他小的元素後面,並移動在此區間內的元素
            ql.r[j+1]=ql.r[j];}
        ql.r[j+1]=ql.r[0];//插入
    }
}


}


執行結果:


  直接插入排序,需要一個記錄的輔助空間,主要的操作時比較和移動。時間複雜度為N2;