編程題目:
34.寫一個排序算法 1-100隨機數字 進行排序,要求效率。
示例代碼:
package program.calculation.exercise34;
/**
* 34.寫一個排序算法 1-100隨機數字(不重複),進行排序,要求效率。
* 冒泡排序時間複雜度:O(n2)
* 快速排序時間複雜度:O(nlog2 n) 效率高
*
*/
public class SortRandom {
public static void main(String[] args) {
int[] num = new int[100];
int[] arr = new int[100];
for(int i=0;i<num.length;i++){
num[i] = i+1;
}
select(num,arr);
System.out.println("數組排序前順序:");
for(int i=0;i<arr.length;i++){
if(i % 10 == 0 && i > 0){
System.out.println();
}
System.out.print(arr[i]+"\t");
}
int lower = 0;
int upper = arr.length-1;
quickSort(arr,lower,upper);
System.out.println();
System.out.println("數組排序後順序:");
for(int i=0;i<arr.length;i++){
if(i % 10 == 0 && i > 0){
System.out.println();
}
System.out.print(arr[i]+"\t");
}
}
private static void select(int[] num, int[] arr) {
for(int i=0;i<arr.length;i++){
while (true) {
int index = (int) (Math.random()*num.length);
if(num[index] != 0){
arr[i] = num[index];
num[index] = 0;
break;
}
}
}
}
private static void quickSort(int[] arr, int lower, int upper) {
if(lower < upper){
int middle = getMiddle(arr,lower,upper);
quickSort(arr, lower, middle);
quickSort(arr, middle+1, upper);
}
}
private static int getMiddle(int[] arr, int lower, int upper) {
while (lower < upper) {
while (lower < upper && arr[lower] <= arr[upper]) {
upper--;
}
if(lower < upper){
int temp = arr[lower];
arr[lower] = arr[upper];
arr[upper] = temp;
}
while (lower < upper && arr[lower] <= arr[upper]) {
lower++;
}
if(lower < upper){
int temp = arr[lower];
arr[lower] = arr[upper];
arr[upper] = temp;
}
}
return lower;
}
}