Java選擇排序法以及實(shí)例詳解
選擇排序技術(shù)是一種選擇數(shù)組中最小的元素并與數(shù)組的第一個(gè)元素交換的方法。接下來(lái),數(shù)組中第二小的元素與第二個(gè)元素交換,反之亦然。
這樣,數(shù)組中的最小元素會(huì)被重復(fù)選擇并放在適當(dāng)?shù)奈恢?,直到整個(gè)數(shù)組被排序。
為選擇排序維護(hù)了兩個(gè)子數(shù)組:
排序子數(shù)組:在每次迭代中,找到最小元素并將其放置在適當(dāng)?shù)奈恢?。該子?shù)組已排序。
未排序的子數(shù)組:未排序的剩余元素。
選擇排序是一種簡(jiǎn)單明了的排序技術(shù)。該技術(shù)只涉及在每次傳遞中找到最小的元素并將其放置在正確的位置。選擇排序非常適合較小的數(shù)據(jù)集,因?yàn)樗梢杂行У貙?duì)較小的數(shù)據(jù)集進(jìn)行排序。
因此,我們可以說選擇排序不適用于較大的數(shù)據(jù)列表。
選擇排序算法
選擇排序的一般算法如下:
選擇排序 (A, N)
第 1 步:對(duì) K = 1 到 N-1 重復(fù)第 2 步和第 3 步
第 2 步:最小調(diào)用例程(A,K,N,POS)
第 3 步:
用 A [POS] 交換 A[K]
[循環(huán)結(jié)束]
第 4 步:退出
例程最小(A、K、N、POS)
第 1 步:[初始化] 設(shè)置 minimumItem = A[K]
第 2 步:[初始化] 設(shè)置 POS = K
第 3 步:
對(duì)于 J = K+1 到 N -1,重復(fù)
if minimumItem > A [J] set minimumItem = A [J] set POS = J [if end] [End of loop]
第 4 步:返回 POS
如您所見,在遍歷數(shù)據(jù)集時(shí)調(diào)用了查找最小數(shù)字的例程。找到最小元素后,將其放置在所需位置。
Java中的選擇排序?qū)崿F(xiàn)
現(xiàn)在讓我們演示實(shí)現(xiàn)選擇排序的 Java 程序。
import java.util.*; class Main { static void sel_sort(int numArray[]) { int n = numArray.length; // traverse unsorted array for (int i = 0; i < n-1; i++) { // Find the minimum element in unsorted array int min_idx = i; for (int j = i+1; j < n; j++) if (numArray[j] < numArray[min_idx]) min_idx = j; // swap minimum element with compared element int temp = numArray[min_idx]; numArray[min_idx] = numArray[i]; numArray[i] = temp; } } public static void main(String args[]) { //declare and print the original array int numArray[] = {7,5,2,20,42,15,23,34,10}; System.out.println("Original Array:" + Arrays.toString(numArray)); //call selection sort routine sel_sort(numArray); //print the sorted array System.out.println("Sorted Array:" + Arrays.toString(numArray)); } }
輸出:
原始數(shù)組:[7, 5, 2, 20, 42, 15, 23, 34, 10] 排序數(shù)組:[2, 5, 7, 10, 15, 20, 23, 34, 42]
知識(shí)點(diǎn)擴(kuò)展:
冒泡排序法思路
1:外層循環(huán):控制它要走幾次。
假設(shè)你有5個(gè)數(shù),那就要走4次,最后一次不用走,最后那個(gè)數(shù)已經(jīng)在它位置了所以就要length-1次。
2:內(nèi)層循環(huán):控制逐一比較,如果發(fā)現(xiàn)前一個(gè)數(shù)比后一個(gè)數(shù)大,則交換。
注意!因?yàn)樵奖容^長(zhǎng)度就越小了,所以長(zhǎng)度要length-1-i。
package com.test_1; public class Demo5_3 { public static void main(String[] args) { // TODO Auto-generated method stub int arr [ ] ={1,6,0,-1,9}; int temp=0;//中間值 //-------冒泡排序法 //外層循環(huán),它決定一共走幾趟 for(int i = 0;i<arr.length-1;i++){ //內(nèi)層循環(huán),開始逐個(gè)比較 //如果我們發(fā)現(xiàn)前一個(gè)數(shù)比后一個(gè)數(shù)大,則交換 for(int j=0;j<arr.length-1-i;j++){ if (arr[j]>arr[j+1]) { //換位 temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } //輸出結(jié)果 for(int i = 0;i<arr.length;i++){ System.out.print(arr[i]); } } }
到此這篇關(guān)于Java選擇排序法以及實(shí)例詳解的文章就介紹到這了,更多相關(guān)Java選擇排序法和示例內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java synchronized關(guān)鍵字和Lock接口實(shí)現(xiàn)原理
這篇文章主要介紹了Java synchronized關(guān)鍵字和Lock接口實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12SpringBoot啟動(dòng)過程的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot啟動(dòng)過程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09spring?security?自定義Provider?如何實(shí)現(xiàn)多種認(rèn)證
這篇文章主要介紹了spring?security?自定義Provider實(shí)現(xiàn)多種認(rèn)證方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java原生方法實(shí)現(xiàn) AES 算法示例
這篇文章主要介紹了Java原生方法實(shí)現(xiàn) AES 算法,結(jié)合實(shí)例形式分析了Java實(shí)現(xiàn)AES加密算法的相關(guān)操作技巧,需要的朋友可以參考下2019-03-03IntelliJ Idea 2020.1 正式發(fā)布,官方支持中文(必看)
這篇文章主要介紹了IntelliJ Idea 2020.1 正式發(fā)布,官方支持中文了,本文通過截圖的形式給大家展示,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04idea配置springboot熱部署終極解決辦法(解決熱部署失效問題)
這篇文章主要介紹了idea配置springboot熱部署終極解決辦法(解決熱部署失效問題),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-07-07