JAVA 陣列的排序方法冒泡、選擇、快速、陣列遞增
阿新 • • 發佈:2019-01-07
1冒泡法排序
<strong><span style="font-size:10px;">public static void main(String[] args) { // TODO Auto-generated method stub int[] array = { 14, 5, 86, 4, 12, 3, 21, 13, 11, 2, 55 }; // 建立一個初始化的一維陣列array System.out.println("未排序的陣列:"); for (int i = 0; i < array.length; i++) { // 遍歷array陣列中的元素 System.out.print(" " + array[i]); // 輸出陣列元素 if ((i + 1) % 5 == 0) // 每5個元素一行 System.out.println(); } int mid; // 定義一箇中間變數,起到臨時儲存資料的作用 for (int i = 0; i < array.length; i++) { // 執行氣泡排序法 for (int j = i; j < array.length; j++) { if (array[j] < array[i]) { mid = array[i]; array[i] = array[j]; array[j] = mid; } } } System.out.println("\n使用冒泡法排序後的陣列:"); for (int i = 0; i < array.length; i++) { // 遍歷排好序的array陣列中的元素 System.out.print(" " + array[i]); // 輸出陣列元素 if ((i + 1) % 5 == 0) System.out.println(); // 每5個元素一行 } }</span></strong>
2.陣列遞增法排序
public static void main(String[] args) { // TODO Auto-generated method stub Random rd = new Random(); int[] array = new int[15]; // 宣告陣列 System.out.println("沒有使用sort方法前的陣列:"); for (int i = 0; i < array.length; i++) { // 利用隨機數隨意產生15個0~20之間的隨機數 array[i] = rd.nextInt(20); // 給array陣列賦值 System.out.print(" " + array[i]); if ((i + 1) % 5 == 0) System.out.println(); } Arrays.sort(array); // 對array陣列進行升序排序 //Arrays.sort(array,5,14); // 對array陣列中的第5個元素~第13個元素之間進行升序排序 System.out.println("\n使用sort方法後的陣列:"); for (int i = 0; i < array.length; i++) { // 將array陣列中的資料輸出 System.out.print(" " + array[i]); if ((i + 1) % 5 == 0) System.out.println(); }<span style="font-family: Arial, Helvetica, sans-serif;"> }</span>
3.選擇排序
public static void main(String[] args) { // TODO Auto-generated method stub int[] array = { 14, 5, 86, 4, 12, 3, 51, 13, 11, 2, 32, 6 }; // 建立一個初始化的一維陣列array int keyValue; // 表示最小的元素值 int index; // 表示最小的元素值的下標 int temp; // 中間變數 System.out.println("未排序的陣列:"); for (int i = 0; i < array.length; i++) { // 遍歷array陣列中的元素 System.out.print(" " + array[i]); // 輸出陣列元素 if ((i + 1) % 5 == 0) // 每5個元素一行 System.out.println(); } for (int i = 0; i < array.length; i++) { // 使用選擇排序法的核心 index = i; keyValue = array[i]; for (int j = i; j < array.length; j++) if (array[j] < keyValue) { index = j; keyValue = array[j]; } temp = array[i]; array[i] = array[index]; array[index] = temp; } System.out.println("\n使用選擇排序法後的陣列:"); for (int i = 0; i < array.length; i++) { // 遍歷排好序的array陣列中的元素 System.out.print(" " + array[i]); // 輸出陣列元素 if ((i + 1) % 5 == 0) System.out.println(); // 每5個元素一行 } }
4.快速排序法
package paixu;
public class kspx {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] intArray = { 12, 11, 45, 6, 8, 43, 40, 57, 3, 20, 15 };
System.out.println("排序前的陣列:");
for (int i = 0; i < intArray.length; i++) {
System.out.print(" " + intArray[i]); // 輸出陣列元素
if ((i + 1) % 5 == 0) // 每5個元素一行
System.out.println();
}
System.out.println();
int[] b = quickSort(intArray, 0, intArray.length - 1); // 呼叫quickSort
System.out.println("使用快迅排序法後的陣列:");
for (int i = 0; i < b.length; i++) {
System.out.print(" " + b[i]);
if ((i + 1) % 5 == 0) // 每5個元素一行
System.out.println();
}
}
public static int getMiddle(int[] array, int left, int right) {
int temp;
// 進行一趟快速排序,返回中心點位置
int mid = array[left]; // 把中心置於a[0]
while (left < right) {
while (left < right && array[right] >= mid)
right--;
temp = array[right]; // 將比中心點小的資料移動到左邊
array[right] = array[left];
array[left] = temp;
while (left < right && array[left] <= mid)
left++;
temp = array[right]; // 將比中心點大的資料移動到右邊
array[right] = array[left];
array[left] = temp;
}
array[left] = mid; // 中心移到正確位置
return left; // 返回中心點
}
public static int[] quickSort(int[] array, int left, int right) {// 快速排序法
if (left < right - 1) { // 如果開始點和結點沒有重疊的時候,也就是指標沒有執行到結尾
int mid = getMiddle(array, left, right); // 重新獲取中間點
quickSort(array, left, mid - 1);
quickSort(array, mid + 1, right);
}
return array;
}
}