1. 程式人生 > >【資料結構】計數排序

【資料結構】計數排序

  • 概念:
  • 計數排序,又稱為鴿巢原理,是對雜湊定址法的變形應用。
  • 核心思想是:

  • 具體程式碼如下:
void CountSort(int* a, int n)//計數排序
{
	int max = a[0];
	int min = a[0];
	for (int i = 0; i < n; i++)
	{
		if (a[i]>max)
		{
			max = a[i];
		}
		if (a[i] < min)
		{
			min = a[i];
		}
	}
	int range = max - min + 1;
	int* countArray = (int*)malloc(sizeof(int)*range);
	memset(countArray, 0, sizeof(int)*range);//把新開闢的陣列初始化為0
	for (int i = 0; i < n; i++)//遍歷原陣列統計每個數字出現的次數
	{
		countArray[a[i] - min]++;
	}
	int index = 0;
	for (int i = 0; i < range; i++)//遍歷範圍,對原陣列進行排序
	{
		while (countArray[i]--)
		{
			a[index] = i + min;
			index++;
		}
	}

}
  • 計數排序總結:

1.計數排序在資料範圍集中時,效率很高,但是適用範圍及場景有限

2.時間複雜度: O(MAX(N,範圍))

3.空間複雜度: O(範圍)~

4.穩定性: 穩定