Java_基礎篇(數組排序)

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 }

 

運行的結果:

相關文章
相關標籤/搜索