java算法 冒泡排序 與 快速排序思想

前言:由於不是科班出身,在找工作被一番嫌棄後,終於痛下決心要將java學好學透。其中排序是初學java必須要跨過的一道邏輯算法坎,所以必須要垮過去。

冒泡排序:

思路: 1.將數組中的數兩兩相比,小的往左邊排,大的往右邊排,很容易想到用遍歷方法,2.沉者下沉,輕者上浮。代碼如下。

import java.util.Arrays;
import java.util.Random;

public class Maopao {
	
	public static void main(String[] args) {
		//用隨機數給數組賦值
		int[] nums = new int[10];
		Random random = new Random();
		for (int i = 0; i < nums.length; i++) {
			nums[i] = random.nextInt(100);
		}
		System.out.println(Arrays.toString(nums));
		int temp = 0;
		//冒泡排序
		for (int i = 0; i < nums.length-1; i++) {
			for (int j = 0; j < nums.length-i-1; j++) {
				if (nums[j] > nums[j+1]) {
					temp = nums[j+1];
					nums[j+1] = nums[j];
					nums[j] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(nums));
	}

}


快速排序:

1.選數組如{21, 68, 5, 86, 74, 58, 4, 71, 99, 10}中的一個數作爲基準點(21),遍歷,將大的往它的右邊排,小的往它的左邊排分成兩段{5,4,10}21{68,86,74,58,71,99}

2.這兩段依然是無序的,於是我們再對兩段進行快速排序,多次排序後就能得出了它最終從小到大的順序(很容易想到遞歸的思路)

代碼如下(看代碼實現更容易理解):

import java.util.Arrays;
import java.util.Random;

public class QuickSortDemo {
	public static void main(String[] args) {
		int[] nums = new int[10];
		Random random = new Random();
		for (int i = 0; i < nums.length; i++) {
			nums[i] = random.nextInt(100);
		}
		System.out.println(Arrays.toString(nums));
		quickSort(nums, 0, nums.length-1);
		System.out.println(Arrays.toString(nums));
	}
	
	/**
	 * 排一次
	 * @param nums 做排序的數組
	 * @param low 數組左邊的下標
	 * @param hight 數組右邊的下標
	 * @return 排序後基準點的下標值
	 */
	public static int getMiddle(int[] nums,int low,int hight){
		int temp = nums[low];//以第一個作爲基準點,小的往左排,大的往右排
		while(low < hight){
			while (low < hight && nums[hight] >= temp) {
				hight--;
			}
			//找到一個比low小的將low值替換
			nums[low] = nums[hight];
			
			while(low < hight && nums[low] <= temp ){
				low++;
			}
			//從左往右找,找到一個比temp大的往右排
			nums[hight] = nums[low];
		}
		nums[low] = temp;
		return low;
	}
	/**
	 * 採用遞歸分而制之
	 */
	public static void quickSort(int[] nums , int low,int hight){
		if (low < hight) {
			int middle = getMiddle(nums, low, hight);//基準點的下標
			quickSort(nums, low, middle-1); //低位排序
			quickSort(nums, middle+1, hight); //高位排序
		}
	}
	
}
參考了該博主的文章,同時也修復了數組有同樣元素出現死循環的bug:http://blog.csdn.net/wangkuifeng0118/article/details/7286332

結語:what can't kill you will make you stronger!

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