Java選擇排序法以及實例詳解
選擇排序技術是一種選擇數(shù)組中最小的元素并與數(shù)組的第一個元素交換的方法。接下來,數(shù)組中第二小的元素與第二個元素交換,反之亦然。
這樣,數(shù)組中的最小元素會被重復選擇并放在適當?shù)奈恢?,直到整個數(shù)組被排序。
為選擇排序維護了兩個子數(shù)組:
排序子數(shù)組:在每次迭代中,找到最小元素并將其放置在適當?shù)奈恢?。該子?shù)組已排序。
未排序的子數(shù)組:未排序的剩余元素。
選擇排序是一種簡單明了的排序技術。該技術只涉及在每次傳遞中找到最小的元素并將其放置在正確的位置。選擇排序非常適合較小的數(shù)據(jù)集,因為它可以有效地對較小的數(shù)據(jù)集進行排序。
因此,我們可以說選擇排序不適用于較大的數(shù)據(jù)列表。
選擇排序算法
選擇排序的一般算法如下:
選擇排序 (A, N)
第 1 步:對 K = 1 到 N-1 重復第 2 步和第 3 步
第 2 步:最小調(diào)用例程(A,K,N,POS)
第 3 步:
用 A [POS] 交換 A[K]
[循環(huán)結束]
第 4 步:退出
例程最小(A、K、N、POS)
第 1 步:[初始化] 設置 minimumItem = A[K]
第 2 步:[初始化] 設置 POS = K
第 3 步:
對于 J = K+1 到 N -1,重復
if minimumItem > A [J] set minimumItem = A [J] set POS = J [if end] [End of loop]
第 4 步:返回 POS
如您所見,在遍歷數(shù)據(jù)集時調(diào)用了查找最小數(shù)字的例程。找到最小元素后,將其放置在所需位置。
Java中的選擇排序實現(xiàn)
現(xiàn)在讓我們演示實現(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]
知識點擴展:
冒泡排序法思路
1:外層循環(huán):控制它要走幾次。
假設你有5個數(shù),那就要走4次,最后一次不用走,最后那個數(shù)已經(jīng)在它位置了所以就要length-1次。
2:內(nèi)層循環(huán):控制逐一比較,如果發(fā)現(xiàn)前一個數(shù)比后一個數(shù)大,則交換。
注意!因為越比較長度就越小了,所以長度要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),開始逐個比較 //如果我們發(fā)現(xiàn)前一個數(shù)比后一個數(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; } } } //輸出結果 for(int i = 0;i<arr.length;i++){ System.out.print(arr[i]); } } }
到此這篇關于Java選擇排序法以及實例詳解的文章就介紹到這了,更多相關Java選擇排序法和示例內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java synchronized關鍵字和Lock接口實現(xiàn)原理
這篇文章主要介紹了Java synchronized關鍵字和Lock接口實現(xiàn)原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12spring?security?自定義Provider?如何實現(xiàn)多種認證
這篇文章主要介紹了spring?security?自定義Provider實現(xiàn)多種認證方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12IntelliJ Idea 2020.1 正式發(fā)布,官方支持中文(必看)
這篇文章主要介紹了IntelliJ Idea 2020.1 正式發(fā)布,官方支持中文了,本文通過截圖的形式給大家展示,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04idea配置springboot熱部署終極解決辦法(解決熱部署失效問題)
這篇文章主要介紹了idea配置springboot熱部署終極解決辦法(解決熱部署失效問題),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-07-07