欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java 算法 6種排序小結(jié)

 更新時(shí)間:2021年10月18日 09:51:44   作者:java菜鳥(niǎo)231  
這篇文章主要介紹了java 算法 6種排序,排序原理及實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

冒泡排序

在這里插入圖片描述

package 冒泡排序;

import java.util.Arrays;

public class Bubble {

    /**
     * 對(duì)數(shù)組a中的元素進(jìn)行排序
     * @param a
     */
    public static int[] sort(int[] a){
        for (int i=a.length-1;i>0;i--){
            for (int j=0;j<i;j++){
                if(greater(a[j],a[j+1])){
                    exch(a,j,j+1);
                }
            }
        }
        return a;
    }

    /**
     * 比較v元素是否大于w元素
     * @param v
     * @param w
     * @return
     */
    private static Boolean greater(int v,int w){
        if (v>=w){
            return true;
        }
        return false;
    }

    /**
     * 數(shù)據(jù)元素i和j交換位置
     * @param a
     * @param i
     * @param j
     */
    private static void exch(int[] a,int i,int j){
        int t=a[i];
        a[i]=a[j];
        a[j]=t;
    }

    public static void main(String[] args) {
        int[] a={4,5,6,3,2,1};
        int[] sort = Bubble.sort(a);
        System.out.println(Arrays.toString(sort));
    }
}

選擇排序

在這里插入圖片描述

package cn.itcast.algorithm.sort;

/**
 * 選擇排序
 */
public class Selection {
    /*
       對(duì)數(shù)組a中的元素進(jìn)行排序
    */
    public static void sort(Comparable[] a){
        for(int i=0;i<=a.length-2;i++){
            //定義一個(gè)變量,記錄最小元素所在的索引,默認(rèn)為參與選擇排序的第一個(gè)元素所在的位置
            int minIndex = i;
            for(int j=i+1;j<a.length;j++){
                //需要比較最小索引minIndex處的值和j索引處的值;
                if (greater(a[minIndex],a[j])){
                    minIndex=j;
                }
            }

            //交換最小元素所在索引minIndex處的值和索引i處的值
            exch(a,i,minIndex);
        }
    }

    /*
        比較v元素是否大于w元素
     */
    private static  boolean greater(Comparable v,Comparable w){
        return v.compareTo(w)>0;
    }

    /*
    數(shù)組元素i和j交換位置
     */
    private static void exch(Comparable[] a,int i,int j){
        Comparable temp;
        temp = a[i];
        a[i]=a[j];
        a[j]=temp;
    }
}

插入排序

在這里插入圖片描述
在這里插入圖片描述

package 插入排序;

import java.util.Arrays;

public class Insertion {

    public static void sort(int[] a){
        for (int i=1;i<a.length;i++){
            //當(dāng)前元素為a[i],依次和i前面的元素比較,找到一個(gè)小于a[i]的元素
            for (int j=i;j>0;j--){
                if (greater(a[j-1],a[j])){
                    exch(a,j-1,j);
                }else {
                    break;
                }
            }
        }
    }

    /**
     * 比較v元素是否大于w元素
     * @param v
     * @param w
     * @return
     */
    private static Boolean greater(int v,int w){
        if (v>=w){
            return true;
        }
        return false;
    }

    /**
     * 數(shù)據(jù)元素i和j交換位置
     * @param a
     * @param i
     * @param j
     */
    private static void exch(int[] a,int i,int j){
        int t=a[i];
        a[i]=a[j];
        a[j]=t;
    }

    public static void main(String[] args) {
        int[] a={4,3,2,10,12,1,5,6};
        Insertion.sort(a);
        System.out.println(Arrays.toString(a));
    }
}

希爾排序

在這里插入圖片描述

package 希爾排序;

import java.util.Arrays;

public class Shell {
    /*
對(duì)數(shù)組a中的元素進(jìn)行排序
*/
    public static void sort(Comparable[] a) {
        int N = a.length;
//確定增長(zhǎng)量h的最大值
        int h = 1;
        while (h < N / 2) {
            h = h * 2 + 1;
        }
//當(dāng)增長(zhǎng)量h小于1,排序結(jié)束
        while (h >= 1) {
//找到待插入的元素
            for (int i = h; i < N; i++) {
//a[i]就是待插入的元素
//把a(bǔ)[i]插入到a[i-h],a[i-2h],a[i-3h]...序列中
                for (int j = i; j >= h; j -= h) {
//a[j]就是待插入元素,依次和a[j-h],a[j-2h],a[j-3h]進(jìn)行比較,如果a[j]小,那么交換位置,如果不小于,a[j] 大,則插入完成。
                    if (greater(a[j - h], a[j])) {
                        exch(a, j, j - h);
                    } else {
                        break;
                    }
                }
            }
            h /= 2;
        }
    }

    /*
    比較v元素是否大于w元素
    */
    private static boolean greater(Comparable v, Comparable w) {
        return v.compareTo(w) > 0;
    }

    /*
    數(shù)組元素i和j交換位置
    */
    private static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }


    //測(cè)試代碼
    public static void main(String[] args) {
        Integer[] a = {9, 1, 2, 5, 7, 4, 8, 6, 3, 5};
        Shell.sort(a);
        System.out.println(Arrays.toString(a));
    }
}


歸并排序

在這里插入圖片描述
在這里插入圖片描述

package 歸并排序;

import java.util.Arrays;

public class Merge {
    private static Comparable[] assist;//歸并所需要的輔助數(shù)組

    /*
    對(duì)數(shù)組a中的元素進(jìn)行排序
    */
    public static void sort(Comparable[] a) {
        assist = new Comparable[a.length];
        int lo = 0;
        int hi = a.length - 1;
        sort(a, lo, hi);
    }

    /*
    對(duì)數(shù)組a中從lo到hi的元素進(jìn)行排序
    */
    private static void sort(Comparable[] a, int lo, int hi) {
        if (hi <= lo) {
            return;
        }
        int mid = lo + (hi - lo) / 2;
//對(duì)lo到mid之間的元素進(jìn)行排序;
        sort(a, lo, mid);
//對(duì)mid+1到hi之間的元素進(jìn)行排序;
        sort(a, mid + 1, hi);
//對(duì)lo到mid這組數(shù)據(jù)和mid到hi這組數(shù)據(jù)進(jìn)行歸并
        merge(a, lo, mid, hi);
    }

    /*
    對(duì)數(shù)組中,從lo到mid為一組,從mid+1到hi為一組,對(duì)這兩組數(shù)據(jù)進(jìn)行歸并
    */
    private static void merge(Comparable[] a, int lo, int mid, int hi) {
//lo到mid這組數(shù)據(jù)和mid+1到hi這組數(shù)據(jù)歸并到輔助數(shù)組assist對(duì)應(yīng)的索引處
        int i = lo;//定義一個(gè)指針,指向assist數(shù)組中開(kāi)始填充數(shù)據(jù)的索引
        int p1 = lo;//定義一個(gè)指針,指向第一組數(shù)據(jù)的第一個(gè)元素
        int p2 = mid + 1;//定義一個(gè)指針,指向第二組數(shù)據(jù)的第一個(gè)元素
        //比較左邊小組和右邊小組中的元素大小,哪個(gè)小,就把哪個(gè)數(shù)據(jù)填充到assist數(shù)組中
        while (p1 <= mid && p2 <= hi) {
            if (less(a[p1], a[p2])) {
                assist[i++] = a[p1++];
            } else {
                assist[i++] = a[p2++];
            }
        }
//上面的循環(huán)結(jié)束后,如果退出循環(huán)的條件是p1<=mid,則證明左邊小組中的數(shù)據(jù)已經(jīng)歸并完畢,如果退
//出循環(huán)的條件是p2 <= hi, 則證明右邊小組的數(shù)據(jù)已經(jīng)填充完畢;
//所以需要把未填充完畢的數(shù)據(jù)繼續(xù)填充到assist中,//下面兩個(gè)循環(huán),只會(huì)執(zhí)行其中的一個(gè)
        while (p1 <= mid) {
            assist[i++] = a[p1++];
        }
        while (p2 <= hi) {
            assist[i++] = a[p2++];
        }
//到現(xiàn)在為止,assist數(shù)組中,從lo到hi的元素是有序的,再把數(shù)據(jù)拷貝到a數(shù)組中對(duì)應(yīng)的索引處
        for (int index = lo; index <= hi; index++) {
            a[index] = assist[index];
        }
    }

    /*
    比較v元素是否小于w元素
    */
    private static boolean less(Comparable v, Comparable w) {
        return v.compareTo(w) < 0;
    }

    /*
    數(shù)組元素i和j交換位置
    */
    private static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }


    //測(cè)試代碼
    public static void main(String[] args) throws Exception {
        Integer[] arr = {8, 4, 5, 7, 1, 3, 6, 2};
        Merge.sort(arr);
        System.out.println(Arrays.toString(arr));


    }
}

快速排序

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

package 快速排序;

import java.util.Arrays;

public class Quick {
    public static void sort(Comparable[] a) {
        int lo = 0;
        int hi = a.length - 1;
        sort(a, lo, hi);
    }

    private static void sort(Comparable[] a, int lo, int hi) {
        if (hi <= lo) {
            return;
        }
//對(duì)a數(shù)組中,從lo到hi的元素進(jìn)行切分
        int partition = partition(a, lo, hi);
//對(duì)左邊分組中的元素進(jìn)行排序
//對(duì)右邊分組中的元素進(jìn)行排序
        sort(a, lo, partition - 1);
        sort(a, partition + 1, hi);
    }

    public static int partition(Comparable[] a, int lo, int hi) {
        Comparable key = a[lo];//把最左邊的元素當(dāng)做基準(zhǔn)值
        int left = lo;//定義一個(gè)左側(cè)指針,初始指向最左邊的元素
        int right = hi + 1;//定義一個(gè)右側(cè)指針,初始指向左右側(cè)的元素下一個(gè)位置
//進(jìn)行切分
        while (true) {
//先從右往左掃描,找到一個(gè)比基準(zhǔn)值小的元素
            while (less(key, a[--right])) {//循環(huán)停止,證明找到了一個(gè)比基準(zhǔn)值小的元素
                if (right == lo) {
                    break;//已經(jīng)掃描到最左邊了,無(wú)需繼續(xù)掃描
                }
            }
//再?gòu)淖笸覓呙?,找一個(gè)比基準(zhǔn)值大的元素
            while (less(a[++left], key)) {//循環(huán)停止,證明找到了一個(gè)比基準(zhǔn)值大的元素
                if (left == hi) {
                    break;//已經(jīng)掃描到了最右邊了,無(wú)需繼續(xù)掃描
                }
            }
            if (left >= right) {
//掃描完了所有元素,結(jié)束循環(huán)
                break;
            } else {
//交換left和right索引處的元素
                exch(a, left, right);
            }
        }
//交換最后rigth索引處和基準(zhǔn)值所在的索引處的值
        exch(a, lo, right);
        return right;//right就是切分的界限
    }

    /*
    數(shù)組元素i和j交換位置
    */
    private static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }

    /*
    比較v元素是否小于w元素
    */
    private static boolean less(Comparable v, Comparable w) {
        return v.compareTo(w) < 0;
    }

    //測(cè)試代碼
    public static void main(String[] args) throws Exception {
        Integer[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 8};
        Quick.sort(arr);
        System.out.println(Arrays.toString(arr));

    }
}


到此這篇關(guān)于java 算法 6種排序的文章就介紹到這了,更多相關(guān)java 算法排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring配置文件的超詳細(xì)圖文介紹

    Spring配置文件的超詳細(xì)圖文介紹

    Spring配置文件是一個(gè)或多個(gè)標(biāo)準(zhǔn)的XML文檔,下面這篇文章主要給大家介紹了關(guān)于Spring配置文件的超詳細(xì)圖文介紹,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 解決Intellij IDEA 使用Spring-boot-devTools無(wú)效的問(wèn)題

    解決Intellij IDEA 使用Spring-boot-devTools無(wú)效的問(wèn)題

    下面小編就為大家?guī)?lái)一篇解決Intellij IDEA 使用Spring-boot-devTools無(wú)效的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • Java 數(shù)據(jù)庫(kù)連接池 Tomcat介紹

    Java 數(shù)據(jù)庫(kù)連接池 Tomcat介紹

    這篇文章主要給大家分享了 Java 數(shù)據(jù)庫(kù)連接池 Tomcat介紹,omcat 是一個(gè)小型的輕量級(jí)應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問(wèn)用戶不是很多的場(chǎng)合下被普遍使用,是開(kāi)發(fā)和調(diào)試JSP 程序的首選。下面來(lái)看看文章內(nèi)容的詳細(xì)介紹吧
    2021-11-11
  • 關(guān)于mybatis-plus插件使用時(shí)的一些問(wèn)題小結(jié)

    關(guān)于mybatis-plus插件使用時(shí)的一些問(wèn)題小結(jié)

    這篇文章主要給大家介紹了關(guān)于mybatis-plus插件使用時(shí)的一些問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • SpringBoot配置logback.xml 多環(huán)境的操作步驟

    SpringBoot配置logback.xml 多環(huán)境的操作步驟

    最近在研究springboot的日志,所以記錄一下,做一下總結(jié),今天重點(diǎn)給大家介紹SpringBoot配置logback.xml 多環(huán)境的操作步驟,要實(shí)現(xiàn)多環(huán)境的配置,主要是依賴于springboot的application.yml文件去實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Spring 多線程事務(wù)控制的實(shí)踐

    Spring 多線程事務(wù)控制的實(shí)踐

    本文主要介紹了Spring 多線程事務(wù)控制的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • java求整數(shù)的位數(shù)方式

    java求整數(shù)的位數(shù)方式

    這篇文章主要介紹了java求整數(shù)的位數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 一文帶你看懂SpringBoot中的全局配置文件

    一文帶你看懂SpringBoot中的全局配置文件

    這篇文章主要介紹了一文帶你看懂SpringBoot中的全局配置文件,全局配置文件能夠?qū)σ恍┠J(rèn)配置值進(jìn)行修改,Spring Boot使用一個(gè)application.properties或者application.yaml的文件作為全局配置文件,需要的朋友可以參考下
    2023-08-08
  • springboot中的RestTemplate使用詳解

    springboot中的RestTemplate使用詳解

    這篇文章主要介紹了springboot中的RestTemplate使用詳解,RestTemplate繼承自InterceptingHttpAccessor并且實(shí)現(xiàn)了RestOperations接口,其中RestOperations接口定義了基本的RESTful操作,這些操作在RestTemplate中都得到了實(shí)現(xiàn),需要的朋友可以參考下
    2023-09-09
  • Linux系統(tǒng)Java環(huán)境配置教程

    Linux系統(tǒng)Java環(huán)境配置教程

    這篇文章給大家介紹的Linux 系統(tǒng)Java環(huán)境配置教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-05-05

最新評(píng)論