計數排序的核心思想就是將需要排序的陣列的元素轉為下標,在輔助空間陣列(輔助空間陣列的初始都是0)中找到對應元素的下標位置,將該位置的元素++,掃瞄下標,將對應不為0的下標記錄賦值給原陣列,然後對應下標元素--
圖例分析:
具體**:
#includevoid countsort(int *a,int結果演示:len);
int maxa(int *a,int
len);
intmain()
while((ch=getchar()!='\n'
)); countsort(a,len);
//呼叫計數排序
for(i=0; i)
return0;
}void countsort(int *a,int
len)
;
//迴圈遍歷(在a中遍歷)將a的元素對應給help的下標位置++,help[a[i]++]
for(i=0; i)
//掃瞄輔助陣列help,如果對應的值不為0的情況下,就將下標賦值給原本的陣列
for(j=0; j1; j++)
//如果help[j]是等於0的情況就說明原本的陣列沒有這個元素,直接可以不管
} }//
找出陣列中的最大值
int maxa(int *a,int
len)
}return
max;
}
方法總結:時間效率高,速度快,但是當數的範圍很大的時候回導致輔助空間也很大,不過在1000以內還是可以忍受的。
演算法 排序 計數排序
計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。計數排序 counting sort 是一種穩定的排序演算法。計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i...
計數排序演算法
countsort.c include include include typedef int datatype typedef char numtype 有效個數 2至127 2 sizeof numtype 8 1 1 define limit numtype 1 sizeof numtype ...
計數排序演算法
計數排序利用空間換取時間,實現了時間複雜度為o n k k表示待排序列的最大值 的高效排序,在一定範圍數值的排序中,比快速排序 堆排序更快。1.只適用於對整數排序。因為計數排序需要通過下標確定整數在新陣列中的下標,如果不為整數,那麼下標也就無法確定 2.待排序列在一定的取值範圍內。利用已有陣列構造額...