1. 程式人生 > >Java交換排序————氣泡排序及快速排序

Java交換排序————氣泡排序及快速排序

  氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。

	public static int num[] = { 9, 8, 6, 4, 3, 7, 5, 2, 1, 0 };

	public static void bubbleSort(int[] numbers) {
		int temp = 0;
		//完成一次外層迴圈就會把最大的確定 外層迴圈只需要完成陣列長度-1次數即可
		for (int i = 0; i < numbers.length - 1; i++) {
			//內層迴圈進行兩個相鄰位置比較和互換
			for (int j = 0 ; j < numbers.length - 1 - i ; j ++ ){
				if (numbers [j] > numbers [j+1]) {
					temp = numbers [j+1];
					numbers [j+1] = numbers[j];
					numbers [j] = temp;
				}
			}
		}
		for (int i = 0 ; i < numbers.length ; i ++){
			System.out.print(numbers[i]);	
		}
		
	}

    快速排序通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分關鍵字小,則分別對這兩部分繼續進行排序,直到整個序列有序。

 public static int getMiddle(int[] numbers, int low,int high)
	    {
	        int temp = numbers[low]; //陣列的第一個作為中軸
	        while(low < high)
	        {
	        while(low < high && numbers[high] > temp)
	        {
	            high--;
	        }
	        numbers[low] = numbers[high];//比中軸小的記錄移到低端
	        while(low < high && numbers[low] < temp)
	        {
	            low++;
	        }
	        numbers[high] = numbers[low] ; //比中軸大的記錄移到高階
	        }
	        numbers[low] = temp ; //中軸記錄到尾
	        return low ; // 返回中軸的位置
	    }
	 
	   public static void quickSort(int[] numbers,int low,int high)
	    {
	        if(low < high)
	        {
	        int middle = getMiddle(numbers,low,high); //將numbers陣列進行一分為二
	        quickSort(numbers, low, middle-1);   //對低欄位表進行遞迴排序
	        quickSort(numbers, middle+1, high); //對高欄位表進行遞迴排序
	        }
	    
	    }
	   
	     /**
	     * 快速排序
	     * @param numbers 帶排序陣列
	     */
	    public static void quick(int[] numbers)
	    {
	        if(numbers.length > 0)   //檢視陣列是否為空
	        {
	        quickSort(numbers, 0, numbers.length-1);
	        }
	    }
最後呼叫:
public static void main(String[] args) {
		 quick(num);
		 for (int i = 0 ; i < num.length ; i ++){
				System.out.print(num[i]);	
			}
		 
	}