選擇排序(selection sort)是一種簡單直觀的排序演算法。
它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素。
存放在序列的起始位置。
然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。
以此類推,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法.
對一組陣列進行排序。
private static int array=;
可以看到我們的需求是對這些數字進行排序。
但這裡先只對其中的一部分:正數,做排序。
private static int arr = ;
**如下:
private static int arr = ;
public static void main(string args)
}system.out.format("最小的數字為::%d",min);
}最小的數字為::0
那麼這裡就是有問題的了。
如果我們的數字裡不包含0的話,這裡始終得不到真正的最小值的。
我們對它進行修改:
private static int arr = ;
public static void main(string args)
}system.out.format("最小的數字為::%d\n",min);
}最小的數字為::1
然後,正式進行排序的時候
那麼我們正式對這部分資料進行排序,但是排序的時候又出問題了???啥子情況
private static int arr = ;
public static void main(string args)
}// 交換位置
int temp = arr[index];
arr[index] = arr[j];
arr[j] = temp;
system.out.format("最小的數字位置::%d\n",index);
system.out.format("jde 位置::%d\n",j);
system.out.format("排序之後::%s\n", arrays.tostring(arr));
system.out.println("----------------");}}
排序之qian::[9, 8, 7, 5, 6, 4, 1, 9, 2, 3]
最小的數字位置::6
jde 位置::0
排序之後::[1, 8, 7, 5, 6, 4, 9, 9, 2, 3]
----------------
排序之qian::[1, 8, 7, 5, 6, 4, 9, 9, 2, 3]
最小的數字位置::8
jde 位置::1
排序之後::[1, 2, 7, 5, 6, 4, 9, 9, 8, 3]
----------------
排序之qian::[1, 2, 7, 5, 6, 4, 9, 9, 8, 3]
最小的數字位置::9
jde 位置::2
排序之後::[1, 2, 3, 5, 6, 4, 9, 9, 8, 7]
----------------
排序之qian::[1, 2, 3, 5, 6, 4, 9, 9, 8, 7]
最小的數字位置::5
jde 位置::3
排序之後::[1, 2, 3, 4, 6, 5, 9, 9, 8, 7]
----------------
排序之qian::[1, 2, 3, 4, 6, 5, 9, 9, 8, 7]
最小的數字位置::5
jde 位置::4
排序之後::[1, 2, 3, 4, 5, 6, 9, 9, 8, 7]
----------------
排序之qian::[1, 2, 3, 4, 5, 6, 9, 9, 8, 7]
最小的數字位置::0
jde 位置::5
排序之後::[6, 2, 3, 4, 5, 1, 9, 9, 8, 7]
// 這裡排序之後,我擦,怎麼回事??
----------------
排序之qian::[6, 2, 3, 4, 5, 1, 9, 9, 8, 7]
最小的數字位置::9
jde 位置::6
排序之後::[6, 2, 3, 4, 5, 1, 7, 9, 8, 9]
----------------
排序之qian::[6, 2, 3, 4, 5, 1, 7, 9, 8, 9]
最小的數字位置::8
jde 位置::7
排序之後::[6, 2, 3, 4, 5, 1, 7, 8, 9, 9]
----------------
排序之qian::[6, 2, 3, 4, 5, 1, 7, 8, 9, 9]
最小的數字位置::0
jde 位置::8
排序之後::[9, 2, 3, 4, 5, 1, 7, 8, 6, 9]
----------------
排序之qian::[9, 2, 3, 4, 5, 1, 7, 8, 6, 9]
最小的數字位置::0
jde 位置::9
排序之後::[9, 2, 3, 4, 5, 1, 7, 8, 6, 9]
----------------
好吧。發現問題。這之後的時候,不時出現最小數字位置為:0的語句。之後就會和陣列的第一位的數字進行交換。
那麼我們就觀察,發現,index是決定最小數字位置的。在這裡會出現幾次最小數字位置為0的情況。
如果它是0的話。說明
if(min > arr[i])
這段比較結果為false。index的值是什麼呢,還是0,保持不變。
這時候發現
排序之qian::[1, 2, 3, 4, 5, 6, 9, 9, 8, 7]
最小的數字位置::0
jde 位置::5
如果我們進行比較的話,就是
arr[j];j = 5;
// 6 > 6,6 > 9,6 > 9,6 > 8,6 > 7
if(6 > 6)
經過修改之後,發現我們不知min需要隨著j變化而變化,還有index,也需要:修改後的**如下:
int min = 0;
for (int j = 0; j < arr.length; j++)
}// 交換位置
int temp = arr[index];
arr[index] = arr[j];
arr[j] = temp;
}
這裡修改 index的初始值為 j。應對,如果第一位就是最小數字的情況。
最終的輸出結果為:
排序之後::[1, 2, 3, 4, 5, 6, 7, 8, 9, 9]
那到這裡,我們的正數排序就完成了。
接下來看看,帶負數的排序。
private static intarray=;
第一邊,直接用原來的方法排序:
排序之後::[-111, -9, -8, -1, 0, 1, 3, 4, 5, 7, 8, 9, 9, 16]
額,一邊就好的嗎???
好吧。這次很順利。之前在家裡寫遇到了別的問題。具體情況參考 index 的位置。
是min出現了問題。min的值每次都賦值:0。
因為有負數,每次min記錄的都是0,在對負數排序之後,在正數中 0 是最小的。所以導致負數之後排序中的數字位置都變成了0。
這裡也是這樣。只不過換了個形式。
另一邊的解決方案是:
if(min > array[i])
// 記錄最大的數值的位置
if(min < array[i])
// 交換位置
// 略 。。。 。。。
// 這裡將min的值記錄成為最大值。
min = max;
這就是我看選擇排序絕噹自己實現的經歷以及遇到的一些情況。
當然,這裡沒有遇到負數排序的問題。
這裡是自己公司午休的時間寫的,遇到的新問題。以及倆個問題之間的總結。相似而不相同。
走一步,再走一步
時光如梭,匆匆流逝的所有,讓我再一次懂得了,人生的時光門票,在不斷的穿梭過去和未來,也任光陰的手撫摸著這個現在,有太多的好像,早已和我的過去劃開了界限,無論悲傷的過往,還是美好而快樂過的曾經,都好像已經不重要了。重要的是,走一步,再走一步。這場在歲月裡一直奔跑的故事,和那始終無法為自己畫上成功圓滿的...
一步一步向前走
一直以來都沒有開始寫部落格,最近開始轉技術方向,所以想記錄下後面的心路歷程。其實,也不算是轉技術方向,因為,這個方向也屬於自己職業規劃的一部分。本人本科學歷,電子資訊工程專業,目前從事應用軟體開發工作,現打算轉向驅動及linux核心開發。未踏足社會時,就想著自己應該成為乙個,能從無到有開發並推出產品...
一步一步寫演算法(之堆排序)
堆排序是另外一種常用的遞迴排序。因為堆排序有著優秀的排序效能,所以在軟體設計中也經常使用。堆排序有著屬於自己的特殊性質,和二叉平衡樹基本是一致的。打乙個比方說,處於大堆中的每乙個資料都必須滿足這樣乙個特性 1 每乙個array n 不小於array 2 n 2 每乙個array n 不小於array...