排序算法是很多学编程的人必然遇到的问题。我本人也看了很多排序的程序,现在把这四种排序算法放在一个程序进行了测试,
都能实现数组的排序。
因为以下代码只写了一个输出,所以当你要测试哪个排序算法时记得把调用另外三个排序算法的那几行代码注释掉。
如果你想同时测试这四个排序算法,可以在每行调用排序方法的后面加入输出语句就行了。
仅供参考,算法不只一种写法哦
package sort;
import java.util.Scanner;
public class SortTest {
public static void main(String[] args) {
int[] num = {23, 64, 15, 3, 93, 30, 51, 28, 49, 66};
System.out.println("排序前: ");
showArray(num);
System.out.println(); //换行,控制格式
num = BubbleSort(num);
// num = ChoiceSort(num);
// num = InsertSort(num);
// num = QuickSort(num, 0, num.length - 1);
System.out.println("排序后:");
showArray(num);
System.out.println(); //换行,控制格式
}
private static void showArray(int[] num) {
for(int i = 0; i < num.length; i++) {
System.out.print(num[i] + " ");
}
}
private static int[] BubbleSort(int[] num) {
for(int i = 0; i < num.length; i++) {
for(int j = 0; j < num.length - 1; j++) {
if(num[j] > num[j + 1]) {
int temp = num[j];
num[j] = num[j + 1];
num[j +1] = temp;
}
}
}
return num;
}
//插入排序
private static int[] InsertSort(int[] num) {
for(int i = 1; i < num.length; i++) {
int temp = num[i];
for(int j = i; j > 0; j--) {
if(num[j - 1] > temp) {
num[j] = num[j - 1];
num[j - 1] = temp;
}
}
}
return num;
}
//优化后的选择排序
private static int[] ChoiceSort(int[] num) {
for (int i = 0; i < 9; i++) {
int min = i;
int j;
for (j = i + 1; j < num.length; j++) {
if (num[min] > num[j]) {
min = j;
}
}
if (min != i) {
int temp = num[i];
num[i] = num[min];
num[min] = temp;
}
}
return num;
}
/*
//选择排序
private static int[] ChoiceSort(int[] num) {
for(int i = 0; i < num.length - 1; i++) {
for(int j = i + 1; j < num.length; j++) {
if(num[i] > num[j]) {
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
return num;
}
*/
// 快速排序
private static int[] QuickSort(int[] num, int i, int j) {
// TODO Auto-generated method stub
if(i < j) {
int middle = portition(num, i, j);
QuickSort(num, i, middle - 1);
QuickSort(num, middle + 1, j);
}
return num;
}
private static int portition(int[] num, int low, int high) {
int i = low, j = high;
int temp = num[i];
if (low < high) {
while (i < j) {
while ((num[j] >= temp) && (i < j)) {
j--;
}
num[i] = num[j];
while ((num[i] <= temp) && (i < j)) {
i++;
}
num[j] = num[i];
}
num[i] = temp;
}
return i;
}
}