国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java數組排序示例(冒泡排序、快速排序、希爾排序、選擇排序)

java數組排序示例(冒泡排序、快速排序、希爾排序、選擇排序)

2019-11-15 14:31java教程網 JAVA教程

java中在運用數組進行排序功能時,一般有四種方法:快速排序法、冒泡法、選擇排序法、插入排序法(希爾排序(Shell Sort)是插入排序的一種),下面是一些示例,需要的朋友可以參考下

快速排序法主要是運用了Arrays中的一個方法Arrays.sort()實現。

冒泡法是運用遍歷數組進行比較,通過不斷的比較將最小值或者最大值一個一個的遍歷出來。

選擇排序法是將數組的第一個數據作為最大或者最小的值,然后通過比較循環,輸出有序的數組。

插入排序是選擇一個數組中的數據,通過不斷的插入比較最后進行排序。
 

復制代碼代碼如下:


package com.firewolf.sort;

 

public class MySort {

 /**
  * @param args
  */
 public static void main(String[] args) {
  int array[] = {45,32,54,12,43,65,11,3,43,6,33,90,44,1,178};
  MySort mySort = new MySort();
  mySort.insertSort(array);
  System.out.print("插入排序結果 :  ");
  mySort.printArray(array);
  System.out.println();
  mySort.bubbleSort(array);
  System.out.print("冒泡排序結果 :  ");
  mySort.printArray(array);
  mySort.qsort(array);
  System.out.println();
  System.out.print("快速排序結果 :  ");
  mySort.printArray(array);
  mySort.shellSort(array);
  System.out.println();
  System.out.print("希爾排序結果 :  ");
  mySort.printArray(array);
  mySort.selectSort(array);
  System.out.println();
  System.out.print("選擇排序結果 :  ");
  mySort.printArray(array);
 }

 /**
  * 直接插入排序
  * 基本思想:在要排序的一組數中,假設前面(n-1)[n>=2] 個數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反復循環,直到全部排好順序
  */
 public void insertSort(int[] array){
  int temp=0;  
     for(int i=1;i<array.length;i++){  
        int j=i-1;  
        temp=array[i];  
        for(;j>=0&&temp<array[j];j--){  
         array[j+1]=array[j];                       //將大于temp的值整體后移一個單位  
        }  
        array[j+1]=temp;  
     } 
 }

 /**
  * 冒泡排序
  * 基本思想:在要排序的一組數中,對當前還未排好序的范圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較后發現它們的排序與排序要求相反時,就將它們互換。
  */
 public void bubbleSort(int[] array) {
     int temp;
     for(int i=0;i<array.length;i++){//趟數
       for(int j=0;j<array.length-i-1;j++){//比較次數
         if(array[j]>array[j+1]){
           temp=array[j];
           array[j]=array[j+1];
           array[j+1]=temp;
         }
       }
     }
    }

 /**
  * 快速排序
  * 基本思想:選擇一個基準元素,通常選擇第一個元素或者最后一個元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準元素小,一部分大于等于基準元素,此時基準元素在其排好序后的正確位置,然后再用同樣的方法遞歸地排序劃分的兩部分。
  * @param array
  */
 public void qsort(int array[]){
  if(array.length>1){
   _qsort(array,0,array.length-1);
  }
 }
 /**
  * 一趟快速排序
  * @param array
  */
 private void _qsort(int[] array,int low,int high){
  if(low < high){
   int middle = getMiddle(array, low, high);
   _qsort(array,low,middle-1);
   _qsort(array, middle+1, high);
  }
 }
 /**
  * 得到中間值
  */
 private int getMiddle(int[] array,int low,int high){
  int tmp = array[low];
  while(low < high){
   while(low < high && array[high] >= tmp)
    high--;
   array[low] = array[high];
   while(low<high && array[low]<=tmp)
    low++;
   array[high] = array[low];
  }
  array[low] = tmp;
  return low;
 }

 /**
  * 簡單選擇排序
  * 基本思想:在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然后在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最后一個數比較為止。
  * @param array
  */
 public void selectSort(int[] array){
  int position=0;  
        for(int i=0;i<array.length;i++){  

            int j=i+1;  
            position=i;  
            int temp=array[i];  
            for(;j<array.length;j++){  
            if(array[j]<temp){  
                temp=array[j];  
                position=j;  
            }  
            }  
            array[position]=array[i];  
            array[i]=temp;  
        } 
 }

 /**
  * 希爾排序(最小增量排序)
  * 基本思想:算法先將要排序的一組數按某個增量d(n/2,n為要排序數的個數)分成若干組,每組中記錄的下標相差d.對每組中全部元素進行直接插入排序,然后再用一個較小的增量(d/2)對它進行分組,在每組中再進行直接插入排序。當增量減到1時,進行直接插入排序后,排序完成。
  * @param array
  */
 public  void shellSort(int[] array){  
     double d1=array.length;  
     int temp=0;  
     while(true){  
         d1= Math.ceil(d1/2);  
         int d=(int) d1;  
         for(int x=0;x<d;x++){  
             for(int i=x+d;i<array.length;i+=d){  
                 int j=i-d;  
                 temp=array[i];  
                 for(;j>=0&&temp<array[j];j-=d){  
                  array[j+d]=array[j];  
                 }  
                 array[j+d]=temp;  
             }  
         }  
         if(d==1)  
             break;  
     }  
 }  

 /**
  * 打印數組中的所有元素
  */

 public void printArray(int[] array){
  for (int i = 0; i < array.length; i++) {
   System.out.print(array[i]+" ");
  }
 }
}



下面是幾種排序方法分開使用的示例

利用Arrays帶有的排序方法快速排序

復制代碼代碼如下:

import java.util.Arrays;
public class Test2{
        public static void main(String[] args){
                int[] a={5,4,2,4,9,1};
                Arrays.sort(a);  //進行排序
                for(int i: a){
                        System.out.print(i);
                }
        }
}

 

冒泡排序算法

復制代碼代碼如下:

public static int[] bubbleSort(int[] args){//冒泡排序算法
                for(int i=0;i<args.length-1;i++){
                        for(int j=i+1;j<args.length;j++){
                                if (args[i]>args[j]){
                                        int temp=args[i];
                                        args[i]=args[j];
                                        args[j]=temp;
                                }
                        }
                }
                return args;
        }

 

選擇排序算法

復制代碼代碼如下:

public static int[] selectSort(int[] args){//選擇排序算法
                for (int i=0;i<args.length-1 ;i++ ){
                        int min=i;
                        for (int j=i+1;j<args.length ;j++ ){
                                if (args[min]>args[j]){
                                        min=j;
                                }
                        }
                        if (min!=i){
                        int temp=args[i];
                        args[i]=args[min];
                        args[min]=temp;        
                        }
                }
                return args;
        }

 

插入排序算法

復制代碼代碼如下:

public static int[] insertSort(int[] args){//插入排序算法
                for(int i=1;i<args.length;i++){
                        for(int j=i;j>0;j--){
                                if (args[j]<args[j-1]){
                                        int temp=args[j-1];
                                        args[j-1]=args[j];
                                        args[j]=temp;        
                                }else break;
                        }
                }
                return args;
        }

 

以上就是java中的四種排序方法。不同的方法效率不一樣,下面是不同的算法的比較和數據交換時的大O表示。

冒泡排序:比較O(N2) 數據交換O(N2)

選擇排序:比較O(N2) 數據交換O(N)

插入排序:比較O(N2) 復制數據O(N)

在實際應用中,我們要盡量選擇效率高的算法。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲福利在线观看 | 国产美女视频网站 | 一区二区三区精品视频 | 毛片免费在线视频 | 精品欧美乱码久久久久久1区2区 | 成人午夜网站 | 国产精品自产拍在线观看 | 亚洲高清资源 | 成人在线| 日韩欧美精品一区二区三区 | 日本理伦片午夜理伦片 | 欧美性猛交一区二区三区精品 | 九九热免费观看 | 亚洲免费成人在线视频 | 久久一区二区视频 | 欧美色综合网 | 婷婷天堂 | 欧美亚洲自拍偷拍 | 欧美精品国产精品 | 亚洲三级在线 | 亚洲专区在线播放 | 国产高清一级片 | 国产精品久久久久久久一区探花 | 久久99精品久久久久婷婷暖91 | 国产精品视频导航 | 国产黄色片一级 | 欧美日韩在线视频观看 | 日韩精品欧美 | aaa综合国产 | 国产精品免费看 | 黄色a视频 | 亚洲精品久久一区二区三区 | 欧美一区二区在线观看 | 五月天色婷婷视频 | 日本一区二区三区四区 | 黄毛片 | 午夜电影网 | 日本狠狠干 | 亚洲欧美日韩精品 | 精品久久久久久久久久久 | 日本一区二区高清不卡 |