1 冒泡排序
冒泡算法由雙層循環實現,其中外層循環用於控制排序輪數,一般是要排序的數組長度減1次,因爲最後一次循環只剩下一個數組元素,不需要對比,同時數組已經完成排序了。而內層循環主要用於對比數組中每個相鄰元素的大小,以確定是否交換位置,對比和交換次數以排序輪數而減少。
算法實現:
package captain;
public class BubbleSortDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {53,1,34,12,6};
BubbleSortDemo bsd = new BubbleSortDemo();
bsd.bubbleSort(arr);//對象調用冒泡排序方法
}
//冒泡排序算法實現方法
public void bubbleSort(int[] arr){
for(int i = 0; i < arr.length-1; i ++){
for(int j = 0; j < arr.length-i-1; j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
showArray(arr);
}
//數組輸出
public void showArray(int[] arr){
for(int e: arr){
System.out.print(e + " ");
}
System.out.println();
}
}
2 直接選擇排序
直接選擇排序方法屬於選擇排序的一種,它的排序速度要比冒泡排序快一些。直接選擇排序的基本思想是將指定排序位置與其它數組元素分別比較,如果滿足條件就交換元素值,注意這裏區別冒泡排序,不是交換相鄰元素,而是把滿足條件的元素與指定的排序位置交換(如從最後一個元素開始排序),這樣排序好的位置逐漸擴大,最後整個數組都成爲已排序好的格式。與冒泡排序相比,直接選擇排序的交換次數要少很多,所以速度會快些。
算法實現:
package captain;
public class SelectSortDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {70,43,55,31,20};
SelectSortDemo ssd = new SelectSortDemo();
ssd.selectSort(arr);//對象調用選擇排序方法
}
//直接選擇算法的實現方法
public void selectSort(int[] arr){
int index;
for(int i = 0; i < arr.length-1; i++){
index = 0;
for(int j = 1; j < arr.length-i; j++){
if(arr[j] > arr[index]){
index = j;//用來記錄最值所在的索引位置
}
}
//內層循環完了之後交換位置
int temp = arr[arr.length-i-1];
arr[arr.length-i-1] = arr[index];
arr[index] = temp;
}
showArray(arr);
}
//數組的輸出
public void showArray(int[] arr){
for(int e: arr){
System.out.print(e + " ");
}
System.out.println();
}
}
3 反轉排序
反轉排序就是以相反的順序把原有數組的內容重新排序。其實現思路就是把數組最後一個元素與第一個元素替換,倒數第二個元素與第二個元素替換,依次類推,直到把所有數組元素反轉替換。
算法實現:
package captain;
public class ReverseSortDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {10,20,30,40,50,60,70};
ReverseSortDemo rsd = new ReverseSortDemo();
rsd.reverseSort(arr);
}
//反轉排序算法的實現方法
public void reverseSort(int[] arr){
System.out.println("數組反轉之前的元素順序:");
showArray(arr);
int temp;
int len = arr.length;
for(int i = 0; i < len/2; i++){
temp = arr[i];
arr[i] = arr[len-1-i];
arr[len-1-i] = temp;
}
System.out.println("數組反轉之後的元素順序:");
showArray(arr);
}
//數組輸出
public void showArray(int[] arr){
for(int e: arr){
System.out.print(e + "\t");
}
System.out.println();
}
}