對于一個int數組,請編寫一個基數排序算法,對數組元素排序。
給定一個int數組A及數組的大小n,請傳回排序後的數組。保證元素均小于等于2000。
測試樣例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
參考文檔:http://www.cnblogs.com/Braveliu/archive/2013/01/21/2870201.html
我的送出
class RadixSort:
def radixSort(self, A, n):
if name == 'main':
r = RadixSort()
print(r.radixSort([1,2,3,5,2,3],6))
參考答案
import java.util.ArrayList;
import java.util.LinkedList;
public class RadixSort {
// ˝◊Èø…∞¸∫¨’˝ ˝°¢∏∫ ˝°¢0µƒª˘ ˝≈≈–Ú
public static void radixSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int negNum = 0; // arr÷–∏∫ ˝µƒ∏ˆ ˝
for (int i = 0; i < arr.length; i++) {
negNum += arr[i] < 0 ? 1 : 0;
int[] negArr = new int[negNum];
int[] posArr = new int[arr.length - negNum];
int negi = 0;
int posi = 0;
if (arr[i] < 0) {
negArr[negi++] = -arr[i];
} else {
posArr[posi++] = arr[i];
radixSortForPositive(negArr);
radixSortForPositive(posArr);
int index = 0;
for (int i = negArr.length - 1; i >= 0; i--) {
arr[index++] = -negArr[i];
for (int i = 0; i < posArr.length; i++) {
arr[index++] = posArr[i];