Java_基础篇(数组排序)

Java_基础之数组排序(从小到大)

1、冒泡排序:

冒泡排序可以写成两层循环。

每次循环将最大的数值交换到数组的最后一个。

每排序完一次,后面就少比较一次。所以二层循环的判断条件写成:arry.length-1-i

 

2、选择排序:

选择排序可以写成两层循环。

每次排序会选择出数组中最小的数,将其交换到数组的第一位。

平均时间复杂度都是:O(n^2)

冒泡排序稳定,选择排序不稳定。

 

Java里面有一个自动排序的函数:Arrays.sort();

 

手写排序,让我们更好的理解算法,这两个排序为最简单的排序算法 。

想找一份好的工作和工资比较高的,就要好好学好算法。

 

以下将是数组排序的代码:

 1 /*
 2  * Java的简单数组排序(从小到大)
 3  * 1、冒泡排序
 4  * 2、选择排序
 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 }

 

运行的结果:

 

posted on 2019-04-20 22:53  HHH燕  阅读(1080)  评论(0编辑  收藏  举报

导航