數組的排序算法

今天好晚了,明天必定補上今天這一課!!困~~java

Java.util.Arrays是Java集成好的用於數組排序的算法。算法

 1 package com.baidu.java;
 2 
 3 import java.util.Arrays;
 4 
 5 //排序算法
 6 public class TestPXSF {
 7     public static void main(String[] args) {
 8         //0.排序算法Java有集成好的算法
 9         int[] arr1=new int[]{1,-4,5,-38,-4,0,50};
10         //遍歷
11         System.out.println("使用Java集成好的算法排序arr1前:");
12         for(int i=0;i<arr1.length;i++){
13             System.out.print(arr1[i]+"   ");
14         }
15         Arrays.sort(arr1);//排序算法
16         System.out.println("\n使用Java集成好的算法排序arr1後:");
17         for(int i=0;i<arr1.length;i++){
18             System.out.print(arr1[i]+"   ");
19         }
20         //1.冒泡排序的算法
21         //聲明一個數組對其中元素排序
22         int[] arr=new int[]{1,-5,10,30,-53,18,100,-6,-5,18,26};
23         int[] arr2=new int[]{1,-4,5,-38,-4,0,50};
24         System.out.println("\n排序以前的遍歷:");
25         for(int i=0;i<arr.length;i++){
26             System.out.print(arr[i]+"   ");
27         }
28         //對數組進行冒泡排序
29         for(int i=0;i<arr.length-1;i++){//冒泡排序走arr.length-1趟
30             for(int j=0;j<arr.length-1-i;j++){//每趟比較的次數
31                 //從頭比較相鄰的兩個數,若前邊的大,則交換
32                 if(arr[j]>arr[j+1]){
33                     int temp=0;
34                     temp=arr[j];
35                     arr[j]=arr[j+1];
36                     arr[j+1]=temp;
37                 }
38             }
39         }
40         
41         System.out.println("\n排序以後的遍歷:");
42         for(int i=0;i<arr.length;i++){
43             System.out.print(arr[i]+"   ");
44         }
45         //2.用直接選擇排序對arr2進行排序
46         System.out.println("\n直接選擇排序排序前遍歷arr2:");
47         for(int i=0;i<arr2.length;i++){
48             System.out.print(arr2[i]+"   ");
49         }
50         //對數組arr2進行直接選擇排序
51         /*for(int i=0;i<arr2.length-1;i++){//比較的次數
52             for(int j=i;j<arr2.length;j++){//每趟都是從第i個元素一直比到最後一個
53                 if(arr2[i]>arr2[j]){//每趟的第一個元素大於後邊的元素,則交換
54                     int temp=0;
55                     temp=arr2[j];
56                     arr2[j]=arr2[i];
57                     arr2[i]=temp;
58                 }
59             }
60         }
61         */
62         //對直接選擇排序的優化,能夠當每趟的第一個數大於後邊的數後,記住後邊數的角標
63         //用這個小些的數再去和後邊的元素比,直到最後找出最小的那個數,跟第一個數交換
64         //這樣作每趟就只交換一次,提升了效率,
65         //優化後以下:
66         for(int i=0;i<arr2.length-1;i++){//比較的次數
67             
68             int t=i;//定義每趟第i個元素爲最小元素
69             
70             for(int j=i;j<arr2.length;j++){//每趟都是從第i個元素一直比到最後一個
71                 if(arr2[t]>arr2[j]){//可是若第i個元素大於後邊的元素,則交換下角標
72                     t=j;//而後由小的這個元素繼續跟後邊比較
73                 }
74                 }
75             if(t!=i){//若是角標變了,則交換
76                 int temp=arr2[t];//最小的數的角標永遠是賦值給t,arr2[t]是最小的數
77                 arr2[t]=arr2[i];
78                 arr2[i]=temp;
79             }
80         }
81         
82         System.out.println("\n直接選擇排序後遍歷arr2:");
83         for(int i=0;i<arr2.length;i++){
84             System.out.print(arr2[i]+"   ");
85         }
86         
87         
88         
89     }
90 }

運行結果:數組

相關文章
相關標籤/搜索