一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

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

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

2019-11-15 14:31java教程網(wǎng) JAVA教程

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

快速排序法主要是運(yùn)用了Arrays中的一個方法Arrays.sort()實(shí)現(xiàn)。

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

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

插入排序是選擇一個數(shù)組中的數(shù)據(jù),通過不斷的插入比較最后進(jìn)行排序。
 

復(fù)制代碼代碼如下:


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("插入排序結(jié)果 :  ");
  mySort.printArray(array);
  System.out.println();
  mySort.bubbleSort(array);
  System.out.print("冒泡排序結(jié)果 :  ");
  mySort.printArray(array);
  mySort.qsort(array);
  System.out.println();
  System.out.print("快速排序結(jié)果 :  ");
  mySort.printArray(array);
  mySort.shellSort(array);
  System.out.println();
  System.out.print("希爾排序結(jié)果 :  ");
  mySort.printArray(array);
  mySort.selectSort(array);
  System.out.println();
  System.out.print("選擇排序結(jié)果 :  ");
  mySort.printArray(array);
 }

 /**
  * 直接插入排序
  * 基本思想:在要排序的一組數(shù)中,假設(shè)前面(n-1)[n>=2] 個數(shù)已經(jīng)是排好順序的,現(xiàn)在要把第n個數(shù)插到前面的有序數(shù)中,使得這n個數(shù)也是排好順序的。如此反復(fù)循環(huá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;  
     } 
 }

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

 /**
  * 快速排序
  * 基本思想:選擇一個基準(zhǔn)元素,通常選擇第一個元素或者最后一個元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準(zhǔn)元素小,一部分大于等于基準(zhǔn)元素,此時基準(zhǔn)元素在其排好序后的正確位置,然后再用同樣的方法遞歸地排序劃分的兩部分。
  * @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;
 }

 /**
  * 簡單選擇排序
  * 基本思想:在要排序的一組數(shù)中,選出最小的一個數(shù)與第一個位置的數(shù)交換;然后在剩下的數(shù)當(dāng)中再找最小的與第二個位置的數(shù)交換,如此循環(huán)到倒數(shù)第二個數(shù)和最后一個數(shù)比較為止。
  * @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;  
        } 
 }

 /**
  * 希爾排序(最小增量排序)
  * 基本思想:算法先將要排序的一組數(shù)按某個增量d(n/2,n為要排序數(shù)的個數(shù))分成若干組,每組中記錄的下標(biāo)相差d.對每組中全部元素進(jìn)行直接插入排序,然后再用一個較小的增量(d/2)對它進(jìn)行分組,在每組中再進(jìn)行直接插入排序。當(dāng)增量減到1時,進(jìn)行直接插入排序后,排序完成。
  * @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;  
     }  
 }  

 /**
  * 打印數(shù)組中的所有元素
  */

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



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

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

復(fù)制代碼代碼如下:

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

 

冒泡排序算法

復(fù)制代碼代碼如下:

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;
        }

 

選擇排序算法

復(fù)制代碼代碼如下:

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;
        }

 

插入排序算法

復(fù)制代碼代碼如下:

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中的四種排序方法。不同的方法效率不一樣,下面是不同的算法的比較和數(shù)據(jù)交換時的大O表示。

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

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

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

在實(shí)際應(yīng)用中,我們要盡量選擇效率高的算法。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费观看日本视频 | 国内自拍2020 | 亚洲国产成人超福利久久精品 | 亚洲国产三级在线观看 | 午夜国产在线视频 | 亚洲国产在线视频精品 | 国产精品成人麻豆专区 | 亚洲精品久久久久福利网站 | 国产精品久久久久jk制服 | 亚洲国产中文字幕在线视频综合 | 天天综合五月天 | 1024国产基地永久免费 | 啊啊啊好大视频 | 青草青草久热精品视频在线网站 | 激情乱文 | 母乳在线 | 久久性生大片免费观看性 | 草莓社区| 脱女学小内内摸出水网站免费 | 美女班主任让我爽了一夜视频 | 麻豆在线观看 | 日韩成人av在线 | 小舞同人18av黄漫网站 | 色老板视频 | 国产美女做爰免费视频软件 | 日产免费自线一二区 | 男男羞羞视频网站国产 | 国产欧美国产精品第一区 | 亚洲久草视频 | 婷婷九月 | 色老板在线视频 | 91亚洲精品国产自在现线 | 久久热r在线视频精品 | 欧美人妖大啪啪 | 精品久久久久亚洲 | 精品视频日本 | 人人爽人人看 | 欧美亚洲国产精品久久久 | 国产精品免费精品自在线观看 | 国产精品视频第一区二区三区 | 97se亚洲国产综合自在线观看 |