選擇排序

選擇排序與冒泡排序很接近框冀,但是選擇排序并不急于把兩次比較中的結(jié)果交換位置。冒泡排序每比較一次,就會交換一次位置裸扶;選擇排序是首先把第一個數(shù)的下標定義為比較對象,讓它與之后最符合條件的數(shù)字進行比較搬素,若后面的數(shù)值大于第一個數(shù)呵晨,將后面數(shù)字與第一個數(shù)交換。

簡單來說就是冒泡排序是1 VS 1熬尺,這兩個數(shù)中符合條件的前進摸屠,冒泡排序時1?VS 全部,后者符合條件粱哼,則把后者的值賦給前者季二,后者不符合條件,則不進行比較揭措,無法進入for循環(huán)胯舷。

還用這幾個數(shù)進行排序:

12,45,10,6,9,5,34

首先它們對應的下標是從開始,0,1,2,3,4,5,6.

選擇排序:12是第一個數(shù)绊含,下標為0桑嘶,與45比較,45大于12躬充,將45的值賦給12逃顶。

12大于10,不進行變動充甚。

排序過程:12,45,10,6,9,5,34

(1)?5 45 10 6 9?12 34?? 第一個數(shù)與余下的最小值交換

(2) 5 6? 45? 9? 12? 34??? 第二個數(shù)與余下的最小值交換

(3) 5?6? 9? 45? 12? 34??? 第三個數(shù)與余下的最小值交換

(4)5? 6? 9? 12? 45? 34??? 第四個數(shù)與余下的最小值交換

(5)5? 6? 9? 12? 34? 45????第五個數(shù)字余下的最小值交換


選擇排序代碼:

import java.util.Scanner;

class MySort {
?public static void main(String[] args) {
??
??int[] arr = new int[10];
??
??boolean ret = getNumFromStdin(arr);
??if (ret) {
??
???selectSort(arr);
???printArray(arr);
??}
?}
?

?/*
??選擇排序 selectSort
?*/
?public static boolean selectSort(int[] arr) {
??//參數(shù)合法性判斷
??if (arr == null || arr.length == 0) {
???System.out.println("Input Param is invalid!");
???return false; //表示函數(shù)運行失敗
??}
??
??//循環(huán)的問題
??
??
??//核心代碼需要循環(huán)9次才能確定數(shù)據(jù)排序成功以政,此處為從大到小排序
??for (int i = 0; i < arr.length - 1; i++) {
??//核心代碼
???int index = i;
???//找出數(shù)組中剩余數(shù)據(jù)的最大值,放到對應的位置
???for (int j = i + 1; j < arr.length; j++) {
????if (arr[index] < arr[j]) {
?????index = j;
???
????}
???}??
???
???//i就是每一次要對應的位置
???if (index != i) {//這里是把最大值賦給前面的數(shù)伴找,盈蛮,如果index==i,則不需要移動位置技矮。index已經(jīng)是最大值所咋的下標抖誉,如//果==i,沒有移動的必要
????int temp = arr[index];
????arr[index] = arr[i];
????arr[i] = temp;
???}
??}
??
??return true;
?}
?
?
?/* -------------------------------------------------------------------??? */
?/**
??需求:找出數(shù)組位處理數(shù)據(jù)中最大的元素穆役,和下標為1的元素互換位置
??參數(shù): int[] arr? 表示要傳入的數(shù)組【首地址】
??返回值: boolean 返回true 表示函數(shù)運行成功寸五,返回false表示函數(shù)運行失敗
???1、傳入的數(shù)組首地址是null
???2耿币、傳入的數(shù)組長度為0
?*/
?public static boolean putMaxAtSecondIndex(int[] arr) {
??//參數(shù)合法性判斷
??if (arr == null || arr.length == 0) {
???System.out.println("Input Param is invalid!");
???return false; //表示函數(shù)運行失敗
??}
??
??int index = 1;
??
??for (int i = 2; i < arr.length; i++) {
???if (arr[index] < arr[i]) {
????index = i;
???}
??}??
??
??if (index != 1) {
???int temp = arr[index];
???arr[index] = arr[1];
???arr[1] = temp;
??}
??
??return true;
??
?}
?
?
?/**
??需求:找出數(shù)組中最大的元素梳杏,和下標為0的元素互換位置
??參數(shù): int[] arr? 表示要傳入的數(shù)組【首地址】
??返回值: boolean 返回true 表示函數(shù)運行成功,返回false表示函數(shù)運行失敗
???1、傳入的數(shù)組首地址是null
???2十性、傳入的數(shù)組長度為0
?*/
?public static boolean putMaxAtFirstIndex(int[] arr) {
??//參數(shù)合法性判斷
??if (arr == null || arr.length == 0) {
???System.out.println("Input Param is invalid!");
???return false; //表示函數(shù)運行失敗
??}
??
??//獲取最大值的下標 利用for循環(huán)找出數(shù)組中最大值下標的操作
??int index = 0; //用index保存數(shù)組中的最大值下標
??for (int i = 1; i < arr.length; i++) {
???if (arr[index] < arr[i]) {
????index = i;
???}
??} //這個循環(huán)結(jié)束叛溢,就可以找出數(shù)組中最大值的下標
??
??//和下標為0的元素互換位置
??if (index != 0) {
???int temp = arr[index];
???arr[index] = arr[0];
???arr[0] = temp;
??}
??
??return true;
?}
?
?/**
??功能:從鍵盤上獲取十個int類型的數(shù)據(jù)放入數(shù)組
??參數(shù): int[] array? 表示要傳入的數(shù)組【首地址】
??返回值: boolean 返回true 表示函數(shù)運行成功,返回false表示函數(shù)運行失敗
???1劲适、傳入的數(shù)組首地址是null
???2楷掉、傳入的數(shù)組長度為0
?*/
?public static boolean getNumFromStdin(int[] array) {
??//參數(shù)合法性判斷
??if (array == null || array.length == 0) {
???System.out.println("Input Param is invalid!");
???return false; //表示函數(shù)運行失敗
??}
??
??Scanner sc = new Scanner(System.in);
??System.out.println("請輸入" + array.length + "個數(shù):");
??
??for (int i = 0; i < array.length; i++) {
???array[i] = sc.nextInt();
??}
??
??return true;
?}
?
?
?
?/**
??功能:展示指定的int類型的數(shù)組
??參數(shù): int[] array? 表示要傳入的數(shù)組【首地址】
??返回值: void
??如果函數(shù)沒有打印數(shù)組,存在兩種情況:
???1霞势、傳入的數(shù)組首地址是null
???2烹植、傳入的數(shù)組長度為0
?*/
?public static void printArray(int[] array) {
??//參數(shù)合法性判斷
??if (array == null || array.length == 0) {
???System.out.println("Input Param is invalid!");
???return; //傳入?yún)?shù)不合法,結(jié)束函數(shù)運行
??}
??
??//利用for循環(huán)打印數(shù)組
??for (int i = 0; i < array.length; i++) {
???System.out.println("array[" + i + "] = " + array[i]);
??}
??//這里可以不用寫return 因為函數(shù)么有返回值
?}
}


?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末愕贡,一起剝皮案震驚了整個濱河市草雕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌固以,老刑警劉巖墩虹,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異憨琳,居然都是意外死亡诫钓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門篙螟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菌湃,“玉大人,你說我怎么就攤上這事闲擦÷叮” “怎么了场梆?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵墅冷,是天一觀的道長。 經(jīng)常有香客問我或油,道長寞忿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任顶岸,我火速辦了婚禮腔彰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辖佣。我一直安慰自己霹抛,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布卷谈。 她就那樣靜靜地躺著杯拐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上端逼,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天朗兵,我揣著相機與錄音,去河邊找鬼顶滩。 笑死余掖,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的礁鲁。 我是一名探鬼主播盐欺,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仅醇!你這毒婦竟也來了找田?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤着憨,失蹤者是張志新(化名)和其女友劉穎墩衙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甲抖,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡漆改,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了准谚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挫剑。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖柱衔,靈堂內(nèi)的尸體忽然破棺而出樊破,到底是詐尸還是另有隱情,我是刑警寧澤唆铐,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布哲戚,位于F島的核電站,受9級特大地震影響艾岂,放射性物質(zhì)發(fā)生泄漏顺少。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一王浴、第九天 我趴在偏房一處隱蔽的房頂上張望脆炎。 院中可真熱鬧,春花似錦氓辣、人聲如沸秒裕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽几蜻。三九已至癞松,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間入蛆,已是汗流浹背响蓉。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哨毁,地道東北人枫甲。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像扼褪,于是被迫代替她去往敵國和親想幻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容