给定一个长度为N的整形数组arr,其中有N个互不相等的自然数1-N。请实现arr的排序,但是不要把下标
位置上的数通过直接赋值的方式替换成
[要求]
时间复杂度为
,空间复杂度为
备注:
第一行有一个整数N。表示数组长度
接下来一行有N个互不相等的自然数1-N。
输出N个整数表示排序后的结果
5 2 1 4 5 3
1 2 3 4 5
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = getArr(n);
int[] ints = normalSort(arr, n);
show(ints);
}
private static int[] normalSort(int[] arr, int n){
int count = 0;
while(count < n){
while (count != arr[count]-1){
swap(arr,count,arr[count]-1);
}
count++;
}
return arr;
}
private static void swap(int[] arr,int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
private static void show(int[] arr){
for (int i = 0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
private static int[] getArr(int n){
int[] arr = new int[n];
for(int i = n; i > 0; i--){
arr[n-i] = i;
}
return arr;
}
}