常用算法(持續更新)Java

一、排序算法

     1)冒泡排序

int arr[] = { 1, 5, 8, 3, 4, 6, 9 };
//算法開始
boolean flag;
for (int i = 0; i < arr.length; i++) {
    flag = true; // 標記
    for (int j = 0; j < arr.length - i - 1; j++) {
	if (arr[j] < arr[j + 1]) {
		int temp = arr[j];
		arr[j] = arr[j + 1];
		arr[j + 1] = temp;
		flag = false; // 交換過
	}
}
if (flag) { // 未交換說明已經有序
	break;
}
}
//輸出測試
for (Integer c : arr) {
    System.out.print(c + " ");
}

  2)選擇排序

int arr[] = { 1, 5, 8, 3, 4, 6, 9 };
		// 選擇排序
		int minIndex, temp;
		for (int i = 0; i < arr.length; i++) {
			minIndex = i;
			for (int j = i + 1; j < arr.length; j++) { // 找出最小值
				if (arr[minIndex] > arr[j]) {
					minIndex = j;
				}
			}
			// 交換
			temp = arr[i];
			arr[i] = arr[minIndex];
			arr[minIndex] = temp;
		}
//輸出測試
		for (Integer c : arr) {
			System.out.print(c + " ");
		}

  3)快速排序

import java.util.*;

public class Main {
	public static void main(String args[]) {
		int arr[] = { 1, 5, 8, 3, 4, 6, 9 };
		// 快速排序
		int left = 0;
		int right = arr.length-1;
		QuickSort(arr,left,right);
                //輸出測試
		for (Integer c : arr) {
			System.out.print(c + " ");
		}
	}

    public static void QuickSort(int[] array, int start, int end) {
    	//特殊情況處理
        if (array.length < 1 || start < 0 || end >= array.length || start > end) return ;
        //獲得分界值
        int smallIndex = partition(array, start, end);
        if (smallIndex > start)
            QuickSort(array, start, smallIndex - 1);
        if (smallIndex < end)
            QuickSort(array, smallIndex + 1, end);
    }
 
    public static int partition(int[] array, int start, int end) {
    	//隨機獲得一箇中間值
        int pivot = (int) (start + Math.random() * (end - start + 1));
        
        int smallIndex = start - 1;
        swap(array, pivot, end);  //取值放到最後
        for (int i = start; i <= end; i++)  //得到一個序列以pivot爲分界線
            if (array[i] <= array[end]) {  
                smallIndex++;  
                if (i > smallIndex)
                    swap(array, i, smallIndex);
            }
        return smallIndex;
    }
 
    /**
     * 交換數組內兩個元素
     * @param array
     * @param i
     * @param j
     */
    public static void swap(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

}

 

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