愛悠閑 > 插入排序

插入排序

分類: Data Structure  |  作者: x_iya 相關  |  發布日期 : 2013-02-11  |  熱度 : 785°

有一個已經有序的數據序列,要求在這個已經排好的數據序列中插入一個數,但要求插入后此數據序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將一個數據插入到已經排好序的有序數據中,從而得到一個新的、個數加一的有序數據,算法適用于少量數據的排序,時間復雜度為O(n^2)。是穩定的排序方法。插入算法把要排序的數組分成兩部分:第一部分包含了這個數組的所有元素,但將最后一個元素除外,而第二部分就只包含這一個元素。在第一部分排序后,再把這個最后元素插入到此刻已是有序的第一部分里的位置

#include <iostream>
using namespace std;

void InsertSort(int array[], int length)
{
	int i, j, key;
	for(i = 1; i < length; i++)
	{
		key = array[i];
		// 把i之前大于array[i]的數據向后移動
		for (j = i - 1; j >= 0 && array[j] > key; j--)
		{
			array[j + 1] = array[j];
		}
		// 在合適位置安放當前元素
		array[j + 1] = key;
	}
}

int main()
{
	int array[100] = {0};
	int n, i;
	cin >> n;
	for (i = 0; i < n; i++)
	{
		cin >> array[i];
	}
	InsertSort(array, n);
	for (i = 0; i < n; i++)
	{
		cout << array[i] << " ";
	}
	cout << endl;
	return 0;
}

折半插入排序:

#include <iostream>
using namespace std;

void BinInsertSort(int array[], int length)
{
	int i, j, key, low, high, mid;
	for(i = 1; i < length; i++)
	{
		key = array[i];
		low = 0;
		high = i - 1;
		while (low <= high)
		{
			mid = (low + high) / 2;
			if(key < array[mid])
			{
				high = mid - 1;
			}
			else
			{
				low = mid + 1;
			}
		}

		// 把i之前大于array[i]的數據向后移動
		for (j = i - 1; j >= low; j--)
		{
			array[j + 1] = array[j];
		}
		// 在合適位置安放當前元素
		array[low] = key;
	}
}

int main()
{
	int array[100] = {0};
	int n, i;
	cin >> n;
	for (i = 0; i < n; i++)
	{
		cin >> array[i];
	}
	BinInsertSort(array, n);
	for (i = 0; i < n; i++)
	{
		cout << array[i] << " ";
	}
	cout << endl;
	return 0;
}


快乐彩中奖说明