常用排序演算法java程式碼實現---快速排序,氣泡排序,選擇排序
阿新 • • 發佈:2018-12-16
快速排序
public class QuickSort { public void qSort(int[] arr,int left,int right) { if(left>right) { return ; } int i = left; int j = right; int temp = arr[left]; while(i<j) { //從右向左遍歷 while(arr[j]>=temp&&i<j) { j--; } //從左向右遍歷 while(arr[i]<=temp&&i<j) { i++; } if(i<j) { int k = arr[i]; arr[i] = arr[j]; arr[j] = k; } } if(arr[i]<temp) { arr[left] = arr[i]; arr[i] = temp; } //System.out.println(Arrays.toString(arr)); //輸出每次排序結果 qSort(arr, left, j-1); qSort(arr, j+1, right); } public static void main(String[] args) { int[] arr = {5,8,12,9,7,36,24}; QuickSort qs = new QuickSort(); qs.qSort(arr, 0, arr.length-1); } }
輸出結果
[5, 7, 8, 9, 12, 24, 36]
改進思路:可以在方法執行前加個判斷,判斷陣列是否已經有序,可以減少排序次數(可自己嘗試實現)
氣泡排序
public class BubbleSort { //氣泡排序,排序後結果從小到大 public void bubbleSort(int arr[]) { for(int i=0;i<arr.length-1;i++) { for(int j=0;j<arr.length-1-i;j++) { if(arr[j]>arr[j+1]) { int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } } public static void main(String[] args) { int[] arr = {5,8,12,9,7,36,24}; BubbleSort bs = new BubbleSort(); bs.bubbleSort(arr); System.out.println(Arrays.toString(arr)); } }
輸出結果
[5, 7, 8, 9, 12, 24, 36]
改進思路:如果這次氣泡排序後與上次冒泡結果一樣,則判斷陣列已經有序,不用再執行冒泡(自己嘗試實現)
選擇排序
/* 簡單選擇排序的基本思想:給定陣列:int[] arr={裡面n個數據}; * 第1趟排序,在待排序資料arr[1]~arr[n]中選出最小的資料, * 將它與arrr[1]交換;第2趟,在待排序資料arr[2]~arr[n]中選出最小的資料,將它與r[2]交換; * 以此類推,第i趟在待排序資料arr[i]~arr[n]中選出最小的資料,將它與r[i]交換,直到全部排序完成。 */ public class SelectSort { public void selectSort(int[] arr) { for(int i=0;i<arr.length-1;i++) { int k=i; for(int j=i;j<arr.length-1;j++) { if(arr[k]> arr[j]) { k=j; } } int temp=arr[i]; arr[i]=arr[k]; arr[k]=temp; } } public static void main(String[] args) { int[] arr = {5,8,12,9,7,36,24}; SelectSort ss = new SelectSort(); ss.selectSort(arr); System.out.println(Arrays.toString(arr)); } }