簡單選擇排序:
package SelectSort;
import InsertSort.shellSort;
//選擇排序之簡單選擇排序
//簡單選擇排序:
//基本思路:
//1.從一組數中選取最小的數與第一個數交換
//2.再從剩下的數組選取最小的數與第二個數交換
//3.循環至倒數第二個數與最後一個數比較爲止
public class SimpleSelectSort {
public int[] selectSort(int[] data){
int tmp = 0;
int position=0;
for(int i=0;i<data.length;i++){
tmp = data[i];
for(int j=i+1;j<data.length;j++){
if(tmp>data[j]){
tmp = data[j];
position = j;
data[position] = data[i];
data[i] = tmp;
}
}
}
return data;
}
public String toString(int[] data){
if(data.length==0){
return "[]";
}else{
StringBuilder sb = new StringBuilder("[");
for(int i = 0;i<data.length;i++){
sb.append(data[i]+",");
}
int len = sb.length();
sb.delete(len-1,len);
return sb.append("]").toString();
}
}
public static void main(String[] args){
int[] data = {1,67,54,6,3,78,34,12,45,56,100};
SimpleSelectSort dis = new SimpleSelectSort();
System.out.println(dis.toString(dis.selectSort(data)));
}
}
堆排序:
package SelectSort;
import java.util.Arrays;
public class HeapSort {
//交換兩者間的數
public static void swap(int[] data,int i,int j){
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
public static void heapSort(int[] data){
int arrayLength = data.length;
//循環創建堆
for(int i = 0;i<arrayLength-1;i++){
//創建堆
//自下至上創建堆,先是獲得最後一個葉子結點的父節點
//比較父節點與其兩個子節點間的大小,子節點大則交換
buildMaxheap(data,arrayLength-1-i);
//堆創建好之後,需要將堆頂元素與最大索引處交換
swap(data,0,arrayLength-1-i);
}
System.out.println("排序後數組:" + Arrays.toString(data));
}
//建造大堆頂
public static void buildMaxheap(int[] data,int lastIndex){
for(int parent = (lastIndex-1)/2;parent>=0;parent--){
//得到該父節點下的子節點,進行比較,交換
//得到的是父節點下的左子節點,並且作爲最大數的一個索引
int biggestIndex = parent*2+1;
if(biggestIndex<lastIndex){
//判斷該左子節點是否還有右子節點
//如果左子節點比右子節點小,則把biggestIndex加一,biggestIndex總是記錄最大值
if(data[biggestIndex]<data[biggestIndex+1]){
biggestIndex++;
}
}
//確定葉子結點,用最大的葉子結點數與父節點作比較,父節點小則交換
if(data[parent]<data[biggestIndex]){
//交換兩者
swap(data,parent,biggestIndex);
//parent = biggestIndex;
biggestIndex = parent;
}
//將最大值索引交換
// biggestIndex = parent;
}
}
public static void main(String[] args) {
//int[] array = {1,13,44,69,97,53,29,42,96,51,40,12,8,14,10,100};
int[] array = {13,69,97,53,29,42,96,51,40,12,8,14,10,100};
HeapSort.heapSort(array);
}
}