国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java實(shí)現(xiàn):選擇排序、冒泡排序、插入排序

這篇具有很好參考價(jià)值的文章主要介紹了Java實(shí)現(xiàn):選擇排序、冒泡排序、插入排序。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

本文我們將使用Java編程語(yǔ)言實(shí)現(xiàn)經(jīng)典的選擇排序、冒泡排序和插入排序算法,并用對(duì)數(shù)器進(jìn)行測(cè)試。

1. 選擇排序

選擇排序的基本思想是:遍歷數(shù)組,每次找到數(shù)組中最小的元素,將其放到數(shù)組的前端。接著,在剩余的元素中繼續(xù)尋找最小的元素,將其放在已找到的最小元素之后。重復(fù)該過(guò)程,直到數(shù)組完全有序。

1.1 選擇排序代碼

    public static void selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        //0~n-1
        //1~n-1
        //2~n-1
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {//從i~n-1上找最小值
                minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            }
            swap(arr, i, minIndex);
        }
     }
     private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
     }
}

1.2 測(cè)試部分

為了測(cè)試選擇排序的正確性,我們需要使用到對(duì)數(shù)器。 對(duì)數(shù)器由以下幾部分組成:

  1. 一種正確的排序方法(comparator),用于對(duì)比測(cè)試;
  2. 隨機(jī)生成一個(gè)數(shù)組(generateRandomArray);
  3. 復(fù)制一個(gè)相同的數(shù)組(copyArray);
  4. 判斷兩個(gè)數(shù)組的值是否相同(isEquals);
  5. 打印數(shù)組(printArray)。
public static void comparator(int[] arr) {
    Arrays.sort(arr);
}
 //生成長(zhǎng)度隨即大小隨機(jī)的數(shù)組
public static int[] generateRandomArray(int maxSize, int maxValue) {
    int[] arr = new int[(int) ((maxSize + 1) * Math.random())];//隨機(jī)長(zhǎng)度
    for (int i = 0; i < arr.length; i++) {
        arr[i] = (int) ((int) (maxValue + 1) * Math.random() - (int) (maxValue * Math.random()));
    }
    return arr;
}
 //復(fù)制數(shù)組
public static int[] copyArray(int[] arr) {
    int[] res = new int[arr.length];
    for (int i = 0; i < arr.length; i++) {
        res[i] = arr[i];
    }
    return res;
}
 //判斷兩個(gè)數(shù)組的值是否相同
public static boolean isEquals(int[] arr1, int[] arr2) {
    if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
        return false;
    }
    if (arr1.length != arr2.length) {
        return false;
    }
    for (int i = 0; i < arr1.length; i++) {
        if (arr1[i] != arr2[i]) {
            return false;
        }
    }
    return true;
}
 //打印數(shù)組
public static void printArray(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
    }
    System.out.println();
}

接下來(lái),我們進(jìn)行選擇排序的大量測(cè)試

public static void main(String[] args) {
     int testTime = 500000;
    int maxSize = 100;
    int maxValue = 100;
    boolean succeed = true;
    for (int i = 0; i < testTime; i++) {
        int[] arr1 = generateRandomArray(maxSize, maxValue);
        int[] arr2 = copyArray(arr1);
        selectionSort(arr1);
        comparator(arr2);
        if (!isEquals(arr1, arr2)) {
            succeed = false;
            printArray(arr1);
            printArray(arr2);
            break;
        }
    }
    System.out.println(succeed ? "Nice!" : "Fucking fucked!");
 }

2. 冒泡排序

冒泡排序的基本思想是:遍歷數(shù)組,相鄰的兩個(gè)元素進(jìn)行比較,如果前一個(gè)元素大于后一個(gè)元素,則交換它們的位置。通過(guò)多次遍歷,較大的元素不斷地往數(shù)組的后端移動(dòng),最終實(shí)現(xiàn)數(shù)組的完全排序。

2.1 冒泡排序代碼

public class Code02_BubbleSort {
    public static void bubbleSort(int[] arr) {
        if(arr==null||arr.length<2){
            return;
        }
        for(int j=arr.length - 1; j >0; j--){
            for(int i=0;i<j;i++){
                if(arr[i]>arr[i+1]){
                    swap(arr, i,i+1);
                }
            }
        }
     }
    public static void swap(int[] arr, int i, int j) {
        arr[i]=arr[i]^arr[j];
        arr[j]=arr[i]^arr[j];
        arr[i]=arr[i]^arr[j];
    }
}

2.2 測(cè)試部分

使用與選擇排序相同的測(cè)試方法,進(jìn)行冒泡排序的大量測(cè)試

public static void main(String[] args) {
     int testTime = 500000;
    int maxSize = 100;
    int maxValue = 100;
    boolean succeed = true;
    for (int i = 0; i < testTime; i++) {
        int[] arr1 = generateRandomArray(maxSize, maxValue);
        int[] arr2 = copyArray(arr1);
        bubbleSort(arr1);
        comparator(arr2);
        if (!isEquals(arr1, arr2)) {
            succeed = false;
            printArray(arr1);
            printArray(arr2);
            break;
        }
    }
    System.out.println(succeed ? "Nice!" : "Fucking fucked!");
 }

3. 插入排序

插入排序的基本思想是:將數(shù)組的元素一個(gè)個(gè)地插入到已經(jīng)有序的部分,使得有序部分不斷擴(kuò)大,直至數(shù)組完全有序。

3.1 插入排序代碼

public class Code03_InsertionSort {
    public static void insertionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 1; i < arr.length; i++) {
            for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
                swap(arr, j, j + 1);
            }
        }
     }
     public static void swap(int[] arr, int i, int j) {
        arr[i] = arr[i] ^ arr[j];
        arr[j] = arr[i] ^ arr[j];
        arr[i] = arr[i] ^ arr[j];
    }
}

測(cè)試內(nèi)容同上面一樣文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-433874.html

到了這里,關(guān)于Java實(shí)現(xiàn):選擇排序、冒泡排序、插入排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu):直接插入排序,希爾排序,選擇排序,堆排序,冒泡排序,快速排序,歸并排序,計(jì)數(shù)排序(C實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu):直接插入排序,希爾排序,選擇排序,堆排序,冒泡排序,快速排序,歸并排序,計(jì)數(shù)排序(C實(shí)現(xiàn))

    個(gè)人主頁(yè) : 個(gè)人主頁(yè) 個(gè)人專欄 : 《數(shù)據(jù)結(jié)構(gòu)》 《C語(yǔ)言》 排序:使一串?dāng)?shù)據(jù),按照其中的某個(gè)或某些的大小,遞增或遞減的排列起來(lái)的操作。 插入排序的思路:把待排序數(shù)組,逐個(gè)插入到已經(jīng)排好序的有序數(shù)組中,直到所有待排序數(shù)組插入完成,的到一個(gè)新的有序

    2024年02月11日
    瀏覽(92)
  • 排序算法一:冒泡、選擇、插入排序

    排序算法一:冒泡、選擇、插入排序

    目錄 ? ? ? ??冒泡排序 理論 代碼實(shí)現(xiàn) 時(shí)間復(fù)雜度 選擇排序 理論 代碼實(shí)現(xiàn) ?時(shí)間復(fù)雜度 插入排序 理論分析 代碼實(shí)現(xiàn) 時(shí)間復(fù)雜度 ? ?冒泡,我們很容易聯(lián)想到水煮沸,或者是魚(yú)兒吐泡的情景,水泡會(huì)在水中上升到達(dá)水面。冒泡排序正如其名,即大的數(shù)一個(gè)個(gè)往上冒出來(lái)。

    2024年02月22日
    瀏覽(16)
  • 排序算法(初階)【冒泡,插入,選擇排序】

    排序算法(初階)【冒泡,插入,選擇排序】

    比較相鄰的兩個(gè)元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。 對(duì)每一對(duì)相鄰元素做同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì),這被稱為一趟冒泡排序 這樣就可以把數(shù)組中要排序的數(shù)中的最大值放到最后,也相當(dāng)于把一個(gè)元素排在了元素有序時(shí)它應(yīng)處于的位置,它既

    2024年01月21日
    瀏覽(24)
  • 冒泡排序 簡(jiǎn)單選擇排序 插入排序 快速排序

    冒泡排序 簡(jiǎn)單選擇排序 插入排序 快速排序

    bubblesort 兩個(gè)for循環(huán),從最右端開(kāi)始一個(gè)一個(gè)逐漸有序 selectsort 假設(shè)是升序,兩個(gè)for循環(huán),從最左端開(kāi)始一個(gè)一個(gè)逐漸有序,找到lengh-1個(gè)無(wú)序區(qū)的最小值 insertsort 兩個(gè)for循環(huán),從最左端開(kāi)始一個(gè)一個(gè)逐漸有序,默認(rèn)第一個(gè)就是有序區(qū),第一個(gè)for遍歷無(wú)序區(qū),第二個(gè)for循環(huán)遍歷

    2024年02月13日
    瀏覽(23)
  • 基于 matplotlib 實(shí)現(xiàn)的基本排序算法的動(dòng)態(tài)可視化項(xiàng)目源碼,通過(guò) pyaudio 增加音效,冒泡、選擇、插入、快速等排序

    基于 matplotlib 實(shí)現(xiàn)的基本排序算法的動(dòng)態(tài)可視化項(xiàng)目源碼,通過(guò) pyaudio 增加音效,冒泡、選擇、插入、快速等排序

    依托 matplotlib 實(shí)現(xiàn)的基本排序算法的動(dòng)態(tài)可視化,并通過(guò) pyaudio 增加音效。 安裝 在使用之前請(qǐng)先檢查本地是否存在以下庫(kù): matplotlib pyaudio fire requirements.txt 中包含了上述的庫(kù) 使用 目前本項(xiàng)目?jī)H提供了以下排序算法 冒泡排序 選擇排序 插入排序 快排 歸并排序 命令行工具 命

    2024年02月08日
    瀏覽(39)
  • 八大排序(一)冒泡排序,選擇排序,插入排序,希爾排序

    八大排序(一)冒泡排序,選擇排序,插入排序,希爾排序

    冒泡排序的原理是: 從左到右,相鄰元素進(jìn)行比較。每次比較一輪,就會(huì)找到序列中最大的一個(gè)或最小的一個(gè)。這個(gè)數(shù)就會(huì)從序列的最右邊冒出來(lái)。 以從小到大排序?yàn)槔?,第一輪比較后,所有數(shù)中最大的那個(gè)數(shù)就會(huì)浮到最右邊;第二輪比較后,所有數(shù)中第二大的那個(gè)數(shù)就會(huì)

    2024年02月08日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)算法--2 冒泡排序,選擇排序,插入排序

    數(shù)據(jù)結(jié)構(gòu)算法--2 冒泡排序,選擇排序,插入排序

    思想就是將相鄰元素兩兩比較,當(dāng)一個(gè)元素大于右側(cè)相鄰元素時(shí),交換他們的位置,小于右側(cè)元素時(shí),位置不變,最終序列中的最大元素,像氣泡一樣,到了最右側(cè)。 這時(shí)冒泡排序第一輪結(jié)束,數(shù)列最右側(cè)元素9的位置可認(rèn)為是一個(gè)有序區(qū),有序區(qū)目前有一個(gè)元素. 第二輪排序

    2024年02月13日
    瀏覽(91)
  • 【數(shù)據(jù)結(jié)構(gòu)--八大排序】之冒泡排序+選擇排序+插入排序

    【數(shù)據(jù)結(jié)構(gòu)--八大排序】之冒泡排序+選擇排序+插入排序

    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ?? ?? 個(gè)人主頁(yè) :阿然成長(zhǎng)日記 ??點(diǎn)擊可跳轉(zhuǎn) ?? 個(gè)人專欄: ??數(shù)據(jù)結(jié)構(gòu)與算法??C語(yǔ)言進(jìn)階 ?? 不能則學(xué),不知?jiǎng)t問(wèn),恥于問(wèn)人,決無(wú)長(zhǎng)進(jìn) ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??每次從a]0]開(kāi)始,

    2024年02月07日
    瀏覽(1271)
  • (搞定)排序數(shù)據(jù)結(jié)構(gòu)(1)插入排序 選擇排序+冒泡排序

    (搞定)排序數(shù)據(jù)結(jié)構(gòu)(1)插入排序 選擇排序+冒泡排序

    目錄 本章內(nèi)容如下?? ?一:插入排序?? ??? ? ? ? ? ????????????????1.1插入排序?? ? ? ????????? ? 1.2希爾排序?? ? 二:選擇排序?? ?? ??????????????2.1選擇排序 ?三:交換排序?? ??? ??????????? ?3.1冒泡排序 ????????1.1直接插入排序 ??

    2024年02月07日
    瀏覽(96)
  • 【數(shù)據(jù)結(jié)構(gòu)】插入排序、選擇排序、冒泡排序、希爾排序、堆排序

    【數(shù)據(jù)結(jié)構(gòu)】插入排序、選擇排序、冒泡排序、希爾排序、堆排序

    前言:生活中我們總是會(huì)碰到各種各樣的排序,今天我們就對(duì)部分常用的排序進(jìn)行總結(jié)和學(xué)習(xí),今天的內(nèi)容還是相對(duì)比較簡(jiǎn)單的一部分,各位一起加油哦! ?? 博主CSDN主頁(yè):衛(wèi)衛(wèi)衛(wèi)的個(gè)人主頁(yè) ?? ?? 專欄分類:數(shù)據(jù)結(jié)構(gòu) ?? ??代碼倉(cāng)庫(kù):衛(wèi)衛(wèi)周大胖的學(xué)習(xí)日記?? ??關(guān)注博主和

    2024年02月04日
    瀏覽(98)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包