34.寫一個排序算法1-100隨機數字進行排序

編程題目:

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;
	}
}

結果顯示:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章