一維陣列常見的三種排序、氣泡排序、選擇排序、插入排序、Arrays內建排序
阿新 • • 發佈:2019-02-02
一維陣列的 氣泡排序 選擇排序 插入排序 Arrays內建排序
package arithmetic;
import java.util.Arrays;
/**
* 一維陣列的排序
* 氣泡排序
* 選擇排序
* 插入排序
* Arrays類內建方法排序
*
* @author sunRainAmazing
*
*/
public class OneArraySort {
public static void main(String[] args) {
int[] arr={12,3,45,24 ,58,14,8};
printArray(arr);
Arrays.sort(arr);// Arrays類的sort方法
printArray(arr);
// printArray(bubbleSort(arr));//氣泡排序
// printArray(selectSort(arr));//氣泡排序
// bubbleSort(arr);
// selectSort(arr);//選擇排序
// select1Sort(arr);//選擇排序
// insertSort(arr);//選擇排序
//
// printArray(arr);
}
/**
* 判斷陣列長度是否小於2
* @param arr 陣列
* @return 是 返回 true,否 返回false
*/
private static boolean backArray(int[] arr){
if(arr.length<2){
return true;
}
return false;
}
/**
* 輸出 陣列
* @param array
*/
private static void printArray(int []array){
for (int i : array) {
System.out.print(i+"\t");
}
System.out.println();
}
/**
* 交換陣列的位置
*/
private static void swap(int[] arr, int i, int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
/**
* 進行氣泡排序
* @param arr 排序的陣列
* @return
*/
public static int[] bubbleSort(int[] arr){
//1、判斷陣列的長度
if(backArray(arr)){
return arr;
}
//2、進行氣泡排序
for (int i = 0; i < arr.length-1; i++) {
for (int j = 1; j < arr.length-i; j++) {
if( arr[j] < arr[j-1]){
//3、交換位置
swap(arr,j-1,j);
// int temp=arr[j];
// arr[j]=arr[j-1];
// arr[j-1]=temp;
}
}
}
return arr;
}
/**
* 選擇排序 尋找下標
* @param array
* @return
*/
public static int[] selectSort(int[] array) {
if (array.length <= 1) {
return array;
}
// for (int i = 1; i < array.length; i++) {
// int index = 0;// 預設最大值下標
// for (int j = 1; j < array.length - i + 1; j++) {
// if (array[j] > array[index]) {
// index = j;
// }
// }
// swap(array, array.length - i, index);
// }
for (int i = 1; i < array.length; i++) {
int maxIndex = 0;
for (int j = 1; j <= array.length - i; j++)
if (array[j] > array[maxIndex])
maxIndex = j;
int temp = array[array.length - i];
array[array.length - i] = array[maxIndex];
array[maxIndex] = temp;
}
return array;
}
/**
* 選擇排序
* @param arr
*/
public static void select1Sort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
// 找最小值 的位置
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 與當前考察位置 數 交換
swap(arr, minIndex, i);
}
}
/**
* 插入排序
* @param arr
*/
public static void insertSort(int [] arr){
// for (int i = 1; i < arr.length; i++) {
// for (int j = i; j > 0; j--)
// if (arr[j] < arr[j - 1])
// swap(arr, j, j - 1);
// }
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j-1]) {// 進行交換
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
} else {
break;
}
}
}
}
}