zoukankan      html  css  js  c++  java
  • 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("
    冒泡排序:");
    17         Print(BubbleSort(arry));
    18         System.out.print("
    选择排序:");
    19         Print(SelectionSort(arry));
    20         System.out.print("
    改进的选择排序:");
    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 }

    运行的结果:

  • 相关阅读:
    vs2015 停 在 update kb2999226 一直不动
    修复vs2012出现 “无法找到包源”的错误
    forward 和redirect的区别
    软件测试分类
    centos7安装HTTPS协议
    php抓取网页特定div区块及图片,从简单入手
    nginx报 File not found 错误
    关于端口
    调试技巧:让断点停在for循环中的 i 为某个值得时候
    an AC a day keeps the WA away ~
  • 原文地址:https://www.cnblogs.com/HHHY/p/10743165.html
Copyright © 2011-2022 走看看