常用算法(持续更新)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;
    }

}

 

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