C++ 插入排序

插入排序的概念:將數據插入到一個有序的序列中,從而得到一個新的有序的序列。
 

例如定義一個亂序的數組

int a[10] = {23,31,11,24,1,4,7,9,36,42};

排序方法:

  1. 我們通常將數組第一個元素a[0]=23作爲已經排好序的序列
  2. 然後從第二個元素a[1]=31開始,和之前已經排好序的序列進行比較。如果當前元素小於之前的元素就將之前元素往後面移,直到當前元素大於之前元素,將當前元素插入

第一次排序:發現比較簡單,因爲元素a[1]<a[0],直接將元素進行交換位置得到一個新的有序序列 {23,31}

第二次排序:是在第一次排序完成的基礎上進行的,所以使用a[2] = 11 和之前的序列{23,31}裏面的每一個元素去比較,比較的順序是從後面向前面比較

  • 也就是從a[1]=31開始與11比較,如果a[1]>11 ,則把a[1] 往後移動一個位置則a[2]=31,a[1]暫時爲空
  • 繼續與之前的元素比較,也就是與a[0]=23與11比較,如果a[0]>11,則把a[0],往後面移動一個位置,即a[1]=23,a[0]爲空
  • 然後繼續往前比較,發現已經沒有元素,所以就可以把11插入到當前結束的空位置a[0] = 11

下面的排序依舊根據這種原理來做,最後根據思路得到完整程序:

#include <iostream>
using namespace std;
int a[10] = {31,23,11,24,1,4,7,9,36,42};
int main() {
	int temp;//臨時變量,因爲a[i]是當前元素,會變成空位置
	for (int i = 0 ; i < 10 ; i ++)
		cout << a[i] << " ";
	cout << endl;
	for (int i = 1 ; i < 10 ; i ++) {
		temp = a[i];//保存當前元素
		while(i > 0 && a[i-1]>temp) {
			a[i] = a[i-1];//將大於當前元素的前一個元素往後面移動
			i--;
		}
		a[i] = temp;//將空位置補上當前元素
	}
	for (int i = 0 ; i < 10 ; i ++) 
		cout << a[i] << " ";
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章