1. 程式人生 > >【演算法】插入排序法

【演算法】插入排序法

一、介紹

1.插入排序是簡單排序演算法中的一種,它主要適用於包括向量和列表在內的任何序列結構

二、思路

1.將數列分為有序字首和無序字尾兩部分,將字尾首元素不斷往字首中移動,直至字尾無元素

2.存在一個標識位,標識有序字首和無序字尾,即s[0,r)為有序字首,s[r,n-1]為無序字尾

3.將元素s[r]往前插入時,需要注意元素的位置移動,此時是在s[0,r]區間進行插入,從後往前比較,若後者比前者小,則交換兩者位置,直至到達首位

三、程式

1.程式

#include "stdafx.h"
#include<iostream>

using namespace std;

void InsertSort(int A[],int n)
{
	for(int r = 1; r < n; r++) //r為標識位,標識排序部分和未排序部分
	{
		for(int i = r - 1; i >= 0; i--)
		{
			if (A[i+1] < A[i]) //將一個元素插入前側排序部分
			{
				int temp = A[i+1];
				A[i+1] = A[i];
				A[i] = temp;
			}
		}
	}
}

2.測試用例

void TestInsertSort()
{
	int A[] = {2,3,7,8,4,9,10,23,45,13,5,1};
	int n = 12;
	std ::cout << "排序前的陣列:" ;
	for (int i = 0 ;i < n ; i++)
	{
		std ::cout << A[i]<<" " ;
	}
	InsertSort(A,n);
	std ::cout << "排序後的陣列:" ;
	for (int i = 0 ;i < n ; i++)
	{
		std ::cout  << A[i]<<" " ;
	}
}

3.輸出

四、複雜度

O(n^2)