Java選擇排序法以及實(shí)例詳解
選擇排序技術(shù)是一種選擇數(shù)組中最小的元素并與數(shù)組的第一個(gè)元素交換的方法。接下來,數(shù)組中第二小的元素與第二個(gè)元素交換,反之亦然。
這樣,數(shù)組中的最小元素會(huì)被重復(fù)選擇并放在適當(dāng)?shù)奈恢?,直到整個(gè)數(shù)組被排序。
為選擇排序維護(hù)了兩個(gè)子數(shù)組:
排序子數(shù)組:在每次迭代中,找到最小元素并將其放置在適當(dāng)?shù)奈恢?。該子?shù)組已排序。
未排序的子數(shù)組:未排序的剩余元素。
選擇排序是一種簡單明了的排序技術(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)樵奖容^長度就越小了,所以長度要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中的StringTokenizer實(shí)現(xiàn)字符串切割詳解
這篇文章主要介紹了Java中的StringTokenizer實(shí)現(xiàn)字符串切割詳解,java.util工具包提供了字符串切割的工具類StringTokenizer,Spring等常見框架的字符串工具類(如Spring的StringUtils),需要的朋友可以參考下2024-01-01
SpringMVC4+MyBatis+SQL Server2014實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離
這篇文章主要介紹了SpringMVC4+MyBatis+SQL Server2014實(shí)現(xiàn)讀寫分離,需要的朋友可以參考下2017-04-04
詳解mybatis多對(duì)一關(guān)聯(lián)查詢的方式
這篇文章主要給大家介紹了關(guān)于mybatis多對(duì)一關(guān)聯(lián)查詢的相關(guān)資料,文中將關(guān)聯(lián)方式以及配置方式介紹的很詳細(xì),需要的朋友可以參考下2021-06-06
基于Spring接口集成Caffeine+Redis兩級(jí)緩存
這篇文章主要介紹了基于Spring接口集成Caffeine+Redis兩級(jí)緩存,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07
Java適配器模式之如何靈活應(yīng)對(duì)不匹配的接口
本文介紹了Java中的適配器模式,包括對(duì)象適配器模式和接口適配器模式,適配器模式通過將一個(gè)類的接口轉(zhuǎn)換成客戶期望的另一個(gè)接口,解決了不同接口之間的不兼容問題,它提高了系統(tǒng)的靈活性、復(fù)用性和解耦性,需要的朋友可以參考下2024-10-10
使用Post方法模擬登陸爬取網(wǎng)頁的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄褂肞ost方法模擬登陸爬取網(wǎng)頁的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03
詳解SpringCloud eureka服務(wù)狀態(tài)監(jiān)聽
這篇文章主要介紹了詳解SpringCloud eureka服務(wù)狀態(tài)監(jiān)聽,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07

