c++ 插入排序算法


第一、算法描述

      直插排序很容易理解,在我們打撲克牌的時候,每一次摸完牌,都會按數字大小或者花色,插入到合適的位置,直到摸完最后一張牌,我們手中的牌已經按大小順序排列好了。這整個過程就是一個插入排序

下面舉個例子,初始數組 {12, 15, 9, 20, 6, 31, 24}

我們把第一個元素12作為已經排序號的數組,用中括號括起來,方便我們觀察

那么初始數組:[12], 15, 9, 20, 6, 31, 24

第一步,拿着15和12比較,發現15大於12,把15插入到12后面,於是當前數組變成

     數組結果:[12, 15 ], 9, 20, 6, 31, 24

第二步,拿着9和15比較,發現15>9,把15向后面移動一位,在把9和12比較發現12>9,把12向后移動一位,最后把9插入

     數組結果:[9,12, 15 ],  20, 6, 31, 24

第三步,拿着20和15比較,發現15<20,不需要調整

     數組結果:[9,12, 15 ,20], 6, 31, 24

如此執行下去,直到所有排序完成,

上面一張圖能完美的展示整個排序過程 ,其中虛線代表while中循環執行的,看下面算法實現

 

第二、算法實現

#include "stdafx.h"
#include<iostream>
using namespace std;
void InsertSort(int a[], int n)
{
	for (int j = 1; j < n; j++)
	{
		int key = a[j]; //待排序第一個元素
		int i = j - 1;  //代表已經排過序的元素最后一個索引數
		while (i >= 0 && key < a[i])
		{
			//從后向前逐個比較已經排序過數組,如果比它小,則把后者用前者代替,
			//其實說白了就是數組逐個后移動一位,為找到合適的位置時候便於Key的插入
			a[i + 1] = a[i];
			i--;
		}
		a[i + 1] = key;//找到合適的位置了,賦值,在i索引的后面設置key值。
	}
}
void main() {
	int d[] = { 12, 15, 9, 20, 6, 31, 24 };
	cout << "輸入數組  { 12, 15, 9, 20, 6, 31, 24 } " << endl;
	InsertSort(d,7);
	cout << "排序后結果:";
	for (int i = 0; i < 7; i++)
	{
		cout << d[i]<<" ";
	}

}

  

 

第三、測試實現

希望我的文章對你能有所幫助。如果喜歡幫我點個推薦,謝謝~  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM