算法学习之线性时间排序之基数排序,计数排序及java实现(二)

2014-11-24 09:17:10 · 作者: · 浏览: 1
int k) {
int result[] = new int[data.length];
int[] temp = new int[k + 1];
// 先初始化临时数组,即保存小于元素x的个数的数组
for (int i = 0; i < temp.length; i++) {
temp[i] = 0;
}
// temp [i]即包含等于i的元素个数
for (int i = 0; i < data.length; i++) {
temp[data[i]] = temp[data[i]] + 1;
}
// temp [i]即包含小于等于i的元素个数
for (int i = 1; i < temp.length; i++) {
temp[i] = temp[i] + temp[i - 1];
}
// 将结果放入result数组,A[j]直接放在最终位置(小于等于A[j]的个数加1的位置)
// temp[data[j]]+1上,由于数组下标和位置相差1
for (int j = data.length - 1; j >= 0; j--) {
int index = temp[data[j]];
result[index - 1] = data[j];
temp[data[j]]--;
}
return result;
}

/**
* 得到数组中的最大数,用于计数排序
*
* @param data
* 待计算数组
* @return 返回最大数
*/
public int getMax(int[] data) {
int max = data[0];
for (int i = data.length - 1; i > 0; i--) {
if (max < data[i]) {
max = data[i];
}
}
return max;
}

public static void main(String[] args) {
RadixSort redix = new RadixSort();
int[] testData = { 2,10,78,189,354,8,756,390,356 };
// 基数排序测试
System.out.println("***基数排序测试***");
redix.radixSort(testData);
for (int data : testData) {
System.out.print(data + ",");
}

// 计数排序测试
System.out.println("\n***计数排序测试***");
int[] testData2 = { 9, 3, 5, 3, 6, 5, 3, 7, 4, 9 };
int max = redix.getMax(testData2);
int[] countSort = redix.countingSort(testData2, max);
for (int data : countSort) {
System.out.print(data + ",");
}
}

}

  结果截图如下: