public static void main(String[] args) {
int[] array = new int[]{5, 9, 8, 7};
//maopaoSort(array);
//selectSort(array);
//insertSort(array);
quickSort(array, 0, array.length - 1);
}
private static void printInt(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
/**
* @description:每次循環冒泡一個最大or最小數
* @param:
* @return:
*/
private static void maopaoSort(int[] array) {
if (array.length <= 1) {
printInt(array);
return;
}
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
printInt(array);
}
/**
* @description: 每次找出最小數
* @param:
* @return:
*/
private static void selectSort(int[] array) {
if (array.length <= 1) {
printInt(array);
return;
}
int minIndex;
for (int i = 0; i < array.length; i++) {
minIndex = i;
for (int j = i; j < array.length; j++) {
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
int temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}
printInt(array);
}
/**
* @description 默認第一個數已排序,第二個數爲要插入的數據
* @param:
* @return:
*/
private static void insertSort(int[] array) {
if (array.length <= 1) {
printInt(array);
return;
}
for (int i = 1; i < array.length; i++) {
int insertNum = array[i];
int j = i - 1;
while (j >= 0 && array[j] > insertNum) {
array[j + 1] = array[j];
j--;
}
array[j + 1] = insertNum;
}
printInt(array);
}
public static void quickSort(int[] array, int start, int end) {
if (start < 0 || end >= array.length || start > end) return;
int smallIndex = partition(array, start, end);
System.out.println(smallIndex);
if (smallIndex > start) {
quickSort(array, start, smallIndex - 1);
}
if (smallIndex < end) {
quickSort(array, smallIndex + 1, end);
}
printInt(array);
}
/**
* 快速排序算法——partition
*
* @param array
* @param start
* @param end
* @return
*/
public static int partition(int[] array, int start, int end) {
int pivot = (int) (start + Math.random() * (end - start + 1));
int smallIndex = start - 1;
swap(array, pivot, end);
for (int i = start; i <= end; i++)
if (array[i] <= array[end]) {
smallIndex++;
if (i > smallIndex)
swap(array, i, smallIndex);
}
return smallIndex;
}
/**
* 交換數組內兩個元素
*
* @param array
* @param i
* @param j
*/
public static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
Java必須要學會的四種排序方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.