前言:由於不是科班出身,在找工作被一番嫌棄後,終於痛下決心要將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!