Java_基礎之數組排序(從小到大)算法
一、冒泡排序:數組
冒泡排序能夠寫成兩層循環。函數
每次循環將最大的數值交換到數組的最後一個。spa
每排序完一次,後面就少比較一次。因此二層循環的判斷條件寫成:arry.length-1-icode
二、選擇排序:blog
選擇排序能夠寫成兩層循環。排序
每次排序會選擇出數組中最小的數,將其交換到數組的第一位。io
平均時間複雜度都是:O(n^2)
class
冒泡排序穩定,選擇排序不穩定。基礎
Java裏面有一個自動排序的函數:Arrays.sort();
手寫排序,讓咱們更好的理解算法,這兩個排序爲最簡單的排序算法 。
想找一份好的工做和工資比較高的,就要好好學好算法。
如下將是數組排序的代碼:
1 /* 2 * Java的簡單數組排序(從小到大) 3 * 一、冒泡排序 4 * 二、選擇排序 5 * 平均時間複雜度都是:O(n^2) 6 * 冒泡排序穩定,選擇排序不穩定。 7 */ 8 package com.basis; 9 10 public class ArraySort { 11 12 public static void main(String[] args) { 13 int[] arry = {1,9,7,25,15,36,99,100,85,45,20,10,3}; //數組初始化 14 System.out.print("原始數組:"); 15 Print(arry); 16 System.out.print("\n冒泡排序:"); 17 Print(BubbleSort(arry)); 18 System.out.print("\n選擇排序:"); 19 Print(SelectionSort(arry)); 20 System.out.print("\n改進的選擇排序:"); 21 Print(SelectionSortChange(arry)); 22 } 23 24 //冒泡排序 25 public static int[] BubbleSort(int arry[]){ 26 for(int i=0;i<arry.length-1;i++){ 27 for(int j=0;j<arry.length-1-i;j++){ 28 if(arry[j]>arry[j+1]){ //交換過程 29 int temp = arry[j]; 30 arry[j] = arry[j+1]; 31 arry[j+1] = temp; 32 } 33 } 34 } 35 return arry; 36 } 37 38 //選擇排序 39 public static int[] SelectionSort(int arry[]){ 40 for(int i=0;i<arry.length;i++){ 41 for(int j=i;j<arry.length;j++){ 42 if(arry[i]>arry[j]){ //交換過程 43 int temp = arry[i]; 44 arry[i] = arry[j]; 45 arry[j] = temp; 46 } 47 } 48 } 49 return arry; 50 } 51 52 /* 53 * 改進: 54 * 先判斷,若符合,先不要馬上去交換兩個數,把小的那個數組的數下標存起來, 55 * 所有比較完再交換,每次循環只須要交換一次或着不交換 56 */ 57 //改進的選擇排序 58 public static int[] SelectionSortChange(int arry[]){ 59 for(int i=0;i<arry.length;i++){ 60 int index=i; //標記數組下標 61 for(int j=i;j<arry.length;j++){ 62 if(arry[index]>arry[j]){ //每一次循環找出數組的值爲最小的下標 63 index=j; 64 } 65 } 66 if(index != i){ 67 int temp = arry[index]; 68 arry[index] = arry[i]; 69 arry[i] = temp; 70 } 71 } 72 return arry; 73 } 74 75 //數組的輸出 76 public static void Print(int arry[]){ 77 for(int i=0;i<arry.length;i++){ 78 System.out.print(arry[i]+" "); 79 } 80 } 81 }
運行的結果: