C++:插入排序演算法實現程式碼
阿新 • • 發佈:2020-12-21
插入排序法
**插人排序法(insertion sort)**的基本思想是把新插入記錄的關鍵碼與已排好序的各記錄關鍵碼逐個比較,當找到第一個比新記錄關鍵碼大的記錄時,該記錄之前即為插入位置k。然後從序列最後一個記錄開始到該記錄,逐個後移一個單元,將新記錄插入k位置。如果新記錄關鍵碼比序列中所有的記錄都大,則插入到最後位置。
設有A[1]~A[n]的n個數據v插入排序的過程可以描述為:
①已排序列首先為A[1].(一個數字一定是有序的);
②然後將A[2]~A[n]逐個插人序列中,進行第à趟排序。將A[i門與 A[1]~A[i一1],的關鍵碼進行比較,若找到A[k]比 A[i]大,則A[i一1]~A[k]逐個後移一個單元,將A[i]插人到k位置;若A[i]比所有元素都大,則什麼也不做。重複進行n-1趟後﹐整個排序過程結束。
圖例:
#include <iostream>
#include <stdlib.h>
#include<ctime>
using namespace std;
#define N 10
void sort(int A[],int n){
int t,i,j,k;
for(i=1;i<N;i++){
t=A[i];k=i-1;
while(A[k]>t){
A[k+1]=A[k];k--;
if(k==-1)break;
}
A[k+1]=t;
}
}
int main(){
int A[N],i;
srand((unsigned int )time(0));
for(i=0;i<N;i++){//隨機生成一個10個的100以內的數字作為陣列A
A[i]=rand()%100;
cout<<A[i]<<" ";
}
sort(A,N);//排序函式
cout<<endl;
for(i=0;i<N;i++)cout<<A[i]<<" "; //輸出
}
結果圖示: