zoukankan      html  css  js  c++  java
  • 冒泡排序

     1 private static int[] bubbleSort(int[] arr) {
     2         int k=arr.length-1,last=0;   //最后一次交换的位置,后面已经为排好序状态
     3         if (arr==null||arr.length<2) {
     4             return arr;
     5         }
     6         for(int i=arr.length-1;i>=0;i--){
     7             boolean flag=false;   //每次比较的时候都设置标志位,查看是否发送交换
     8             for (int j = 0; j <k; j++) {
     9                 if (arr[j]>arr[j+1]) {
    10                     last=j;
    11                     swap(arr,j,j+1);
    12                     flag=true;   //发生交换后,标志位变为true
    13                 }
    14             }
    15             k=last;
    16             //如果标志位不发生变化,则说明已处于排好序的状态
    17             if (!flag) {
    18                 return arr;
    19             }
    20         }
    21         return arr;
    22     }
    23     private static void swap(int[] arr, int j, int i) {
    24         int tmp=arr[j];
    25         arr[j]=arr[i];
    26         arr[i]=tmp;
    27     }
    28     
    29     private static int[] creatArray(int length,int range) {
    30         if (length<1) {
    31             return null;
    32         }
    33         int arr[]=new int[length];
    34         for(int i=0;i<length;i++){
    35             arr[i]=(int)(Math.random()*range);
    36         }
    37         return arr;
    38     }
    39     private static void show(int[] arr) {
    40         if (arr.length<1||arr==null) {
    41             return;
    42         }
    43         for(int i=0;i<arr.length;i++){
    44             System.out.print(arr[i]+" ");
    45         }
    46         System.out.println();
    47     }
    48     public static void main(String[] args) {
    49         for(int i=0;i<5;i++){
    50             show(bubbleSort(creatArray(10, 30)));
    51         }
    52     }
    View Code

    冒泡排序,为相邻两个元素进行比较,扫描的范围从0-N-1到1;时间复杂度为O(n方)

     1 private static int[] bubbleSort(int[] arr) {
     2         int k=arr.length-1,last=0;   //最后一次交换的位置,后面已经为排好序状态
     3         if (arr==null||arr.length<2) {
     4             return arr;
     5         }
     6         for(int i=arr.length-1;i>=0;i--){
     7             boolean flag=false;   //每次比较的时候都设置标志位,查看是否发送交换
     8             for (int j = 0; j <k; j++) {
     9                 if (arr[j]>arr[j+1]) {
    10                     last=j;
    11                     swap(arr,j,j+1);
    12                     flag=true;   //发生交换后,标志位变为true
    13                 }
    14             }
    15             k=last;
    16             //如果标志位不发生变化,则说明已处于排好序的状态
    17             if (!flag) {
    18                 return arr;
    19             }
    20         }
    21         return arr;
    22     }
  • 相关阅读:
    Swift 3 中的访问控制 open public internal fileprivate private
    swift3.0 创建一个app引导页面
    cocoapods安装及常用命令
    swift 多线程及GCD
    swift 键盘属性与事件
    [bzoj2588] Count on a tree
    [JSOI2007] 文本生成器
    18.09.22模拟赛T2 历史
    [USACO18OPEN] Talent Show
    [国家集训队] 整数的lqp拆分
  • 原文地址:https://www.cnblogs.com/peng111/p/5768829.html
Copyright © 2011-2022 走看看