冒泡排序、选择排序、插入排序、快速排序和归并排序Java实现
import java.util.Scanner;
public class Sort {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
while (true) {
System.out.println("请输入需要排序的数字个数(-1作为结束)");
int size = sc.nextInt();
if (size <= 0) {
System.out.println("end....");
break;
}
int[] a = new int[size];
System.out.println("请输入数字,以空格隔开");
for (int i = 0; i < size; ++i) {
a[i] = sc.nextInt();
}
System.out.println("请选择你要执行的排序算法(输入前面的数字)");
System.out.println("1:冒泡排序(升序)");
System.out.println("2:选择排序(降序)");
System.out.println("3:插入排序(升序)");
System.out.println("4:希尔排序(待写)");
System.out.println("5:归并排序(升序)");
System.out.println("6:快速排序(升序)");
System.out.println("7:基数排序(待写)");
System.out.println("8:桶排序(待写)");
int x = sc.nextInt();
Solve s = new Solve();
switch (x) {
case 1: {
s.bubble_Sort(a, size);
break;
}
case 2: {
s.select_Sort(a, size);
break;
}
case 3: {
s.insert_Sort(a, size);
break;
}
case 5: {
s.merge_Sort(a, 0, size - 1);
break;
}
case 6: {
s.quick_Sort(a, 0, size - 1);
break;
}
}
for (int temp : a) {
System.out.println(temp);
}
}
}
}
class Solve {
void bubble_Sort(int[] a, int size) {
for (int i = 1; i < size; ++i) {
for (int j = 0; j < size - i; ++j) {
if (a[j] > a[j + 1]) {
int temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
}
}
}
}
void select_Sort(int[] a, int size) {
for (int i = 0; i < size - 1; ++i) {
int t = i;
for (int j = i + 1; j < size; ++j) {
if (a[t] >= a[j]) {
} else {
t = j;
}
}
int temp = a[i];
a[i] = a[t];
a[t] = temp;
}
}
void insert_Sort(int[] a, int size) {
for (int i = 1; i < size; ++i) {
int t = i;
for (int j = i - 1; j >= 0; --j) {
if (a[t] < a[j]) {
int temp = a[t];
a[t--] = a[j];
a[j] = temp;
} else {
break;
}
}
}
}
void shell_Sort(int[] a, int size) {
}
void quick_Sort(int[] a, int l, int r) {
if (l >= r)
return;
int i = l, j = r, key = a[l];
while (i < j) {
while (i < j && a[j] >= key) {
j--;
}
if (i < j) {
a[i] = a[j];
i++;
}
while (i < j && a[i] < key) {
++i;
}
if (i < j) {
a[j] = a[i];
--j;
}
}
a[i] = key;
quick_Sort(a, l, i - 1);
quick_Sort(a, i + 1, r);
}
void merge_Sort(int[] A, int start, int end) {
if (start >= end) {
return;
}
int middle = (start + end) / 2;
merge_Sort(A, start, middle);
merge_Sort(A, middle + 1, end);
int[] temp = new int[end - start + 1];
int i = start;
int j = middle + 1;
int index = 0;
while (i <= middle && j <= end) {
if (A[i] <= A[j]) {
temp[index++] = A[i++];
} else {
temp[index++] = A[j++];
}
}
while (i <= middle) {
temp[index++] = A[i++];
}
while (j <= end) {
temp[index++] = A[j++];
}
index = 0;
for (i = start; i <= end; i++) {
A[i] = temp[index++];
}
}
}