1. 程式人生 > >【資料結構】直接插入排序

【資料結構】直接插入排序

  • 概念:

      直接插入排序是一種簡單的插入排序法,其基本思想是:把待排序的記錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中,直到所有的記錄插入完為止,得到一一個新的有序序列。

  • 核心思想:

      將陣列中的所有元素依次跟前面已經排好的元素相比較,將本輪選擇的元素a[end+1]與已經排好序的元素a[end](一開始相當於第一個元素已排過序)相比較。如果:a[end]>a[end+1],即如果已經排序的元素比選擇的元素大,則將二者交換,直到選擇的資料和已經排好序的全部元素都比較過,再讓end++,用同樣的方法,比較其他的數,直到所有數字都有序,排序結束。

 

  • 具體程式碼:
#include <stdio.h>
#include <stdlib.h>
void InsertSort(int* a, int n)//插入排序
{
	for (int i = 0; i < n-1; i++)
	{
		int end = i;
		int tmp = a[end + 1];
		while (end >= 0 && a[end] > tmp)
		{
			a[end + 1] = a[end];
			end--;
		}
		a[end + 1] = tmp;
	}
}
void SortTest()
{
	int a[10] = { 5, 2, 4, 6, 1, 3, 8, 7, 9,0 };
	int sz = sizeof(a) / sizeof(a[0]);
	printf("插入排序:>");
	InsertSort(a, sz);
	PrintArray(a, sz);
}
int main()
{
	SortTest();
	system("pause");
	return 0;
}

 

  • 直接插入排序總結:

1.元素集合越接近有序,直接插入排序演算法的時間效率越高

2.時間複雜度: O(N^2)

3.空間複雜度: 0(1),它是一種穩定的排序演算法

4.穩定性:穩定