1. 程式人生 > >常用排序算法二

常用排序算法二

post 感覺 nbsp i++ clas 插入元素 sta 選擇排序 static

SELECTION SORT:選擇排序算法,每次從未完成排序的部分選出最小的插入未完成排序元素的最前面

代碼實現比較好寫:


import java.util.*;

public class SelectSort
{
public static void main(String[] args)
{
System.out.println("Hello World!");

int [] a = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};

selectionSort(a);
}

public static void selectionSort(int [] a)
{
int length = a.length;

//int min = -1;

int minPos = -1;//記錄當前最小的值在數組中的位置

for(int i = 0; i < length-1; i++)//需要從左開始循環length-1次
{
minPos = i;//循環前,將最前面沒有排序的值作為最小值記錄下來其位置
for( int j = i + 1; j < length; j++)
{
if(a[minPos] > a[j])//從左到右開始比較還未完成排序的數字,保存最小數字的位置
{
minPos = j;
}
}
System.out.print(a[i]+":"+a[minPos]);
int tem = a[i];//交換最小數字和剛開始排序開始的位置

a[i] = a[minPos];
a[minPos] = tem;
System.out.println(Arrays.toString(a));
}
}
}


運行結果:

E:\java\java_test\sortprogram>java SelectSort
Hello World!
3:2[2, 44, 38, 5, 47, 15, 36, 26, 27, 3, 46, 4, 19, 50, 48]
44:3[2, 3, 38, 5, 47, 15, 36, 26, 27, 44, 46, 4, 19, 50, 48]
38:4[2, 3, 4, 5, 47, 15, 36, 26, 27, 44, 46, 38, 19, 50, 48]
5:5[2, 3, 4, 5, 47, 15, 36, 26, 27, 44, 46, 38, 19, 50, 48]
47:15[2, 3, 4, 5, 15, 47, 36, 26, 27, 44, 46, 38, 19, 50, 48]
47:19[2, 3, 4, 5, 15, 19, 36, 26, 27, 44, 46, 38, 47, 50, 48]
36:26[2, 3, 4, 5, 15, 19, 26, 36, 27, 44, 46, 38, 47, 50, 48]
36:27[2, 3, 4, 5, 15, 19, 26, 27, 36, 44, 46, 38, 47, 50, 48]
36:36[2, 3, 4, 5, 15, 19, 26, 27, 36, 44, 46, 38, 47, 50, 48]
44:38[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 46, 44, 47, 50, 48]
46:44[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 50, 48]
46:46[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 50, 48]
47:47[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 50, 48]
50:48[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

E:\java\java_test\sortprogram>


INSERECTION SORT:插入排序-----代碼加了註釋,感覺很詳細了。

import java.util.*;

public class InsertSort
{
public static void main(String[] args)
{
System.out.println("Hello World!");
int [] a = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
insertionSort(a);
}

public static void insertionSort(int a[])
{
int length = a.length;

for(int i = 1; i < length; i++)//從第二個元素開始,第一元素默認以排好
{
int insert = a[i];//準備要插入的元素,把要插入元素的位置空出來,為了能移動元素
for(int j = i-1; j >= 0; j--)//從要插入元素位置往前查,以便確認插入元素要插入的位置
{
if(a[j] > insert)//如果當前元素大於要準備插入的元素,則將該元素往後移動一位
{
int tem = a[j];
a[j] = a[j + 1];
a[j+1] = tem;
}
else//如果當前元素小要準備插入的元素,則將要準備插入的元素插入該元素的後面,同時退出這次循環,開始排下一個元素
{
int tem1 = a[j+1];
a[j+1] = insert;
break;
}
}

System.out.println(Arrays.toString(a));
}
}
}


運行結果:

Hello World!
[3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
[3, 38, 44, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
[3, 5, 38, 44, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
[3, 5, 38, 44, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
[3, 5, 15, 38, 44, 47, 36, 26, 27, 2, 46, 4, 19, 50, 48]
[3, 5, 15, 36, 38, 44, 47, 26, 27, 2, 46, 4, 19, 50, 48]
[3, 5, 15, 26, 36, 38, 44, 47, 27, 2, 46, 4, 19, 50, 48]
[3, 5, 15, 26, 27, 36, 38, 44, 47, 2, 46, 4, 19, 50, 48]
[2, 3, 5, 15, 26, 27, 36, 38, 44, 47, 46, 4, 19, 50, 48]
[2, 3, 5, 15, 26, 27, 36, 38, 44, 46, 47, 4, 19, 50, 48]
[2, 3, 4, 5, 15, 26, 27, 36, 38, 44, 46, 47, 19, 50, 48]
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 50, 48]
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 50, 48]
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

E:\java\java_test\sortprogram>

常用排序算法二