比较计数排序
针对排序列表中的每一个元素,算出列表中小于该元素的元素个数,并把结果记录在一张表中。这个“个数”指出了该元素在有序列表中的位置。例如一个列表A中有一个元素为10,而小于10的元素个数有5个,那么10应该排在第六个位置上,也就是A[5](下标从0开始)。这个算法称为比较计数排序。
下面来个图形象的说明。
A[0…5] | 62 | 31 | 84 | 96 | 19 | 47 |
---|---|---|---|---|---|---|
count[] | 0 | 0 | 0 | 0 | 0 | 0 |
首先用于计数的数组清零。
A[0…5] | 62 | 31 | 84 | 96 | 19 | 47 |
---|---|---|---|---|---|---|
count[] | 3 | 0 | 1 | 1 | 0 | 0 |
进行第一轮比较,i=0,j=i+1,此后j每次加1
A[i]小于A[j]时,count[j]++。
A[i]大于或等于A[j]时,count[i]++。
A[0…5] | 62 | 31 | 84 | 96 | 19 | 47 |
---|---|---|---|---|---|---|
count[] | 3 | 1 | 2 | 2 | 0 | 1 |
进行第二轮比较,i=1,j=i+1,j每次加1
A[0…5] | 62 | 31 | 84 | 96 | 19 | 47 |
---|---|---|---|---|---|---|
count[] | 3 | 1 | 4 | 3 | 0 | 1 |
进行第三轮比较