主要用选择排序的方法,每次选择最小值输出,通过计最小值出现的次数来解决数组中重复值的问题。时间复杂度比较高,来换取比较低的空间复杂度(没有申请别的空间,空间复杂度是O(1)?),并且不修改原数组,直接输出。
public void sort(int [] nums){
int count = 0, min = nums[0], min_cnt = 0, pre = -1;
while(count < nums.length){
for (int i = 0; i < nums.length; i++) {
if(nums[i] <= pre)continue;
else if(nums[i] < min){
min = nums[i];
min_cnt = 1;
}
else if(nums[i] == min) min_cnt++;
}
pre = min;
count += min_cnt;
for (int j = 0; j < min_cnt; j++)
System.out.print(min + " ");
for (int i = 0; i < nums.length; i++){
if(nums[i] > min) {
min = nums[i];
break;
}
}
min_cnt = 0;
}
}