package test;
import java.util.Scanner;
class Sort {
// 冒泡排序
public static void bubbleSort(int data[], int num)// 对data [ ] 进行冒泡排序
{
printAll(data, num,"排序前:");
System.out.println();
int i, j;
int temp;
for (i = 1; i <= num - 1; i++) // i 是排序趟数;最多n-1趟冒泡
{
for (j = num - 1; j > i - 1; j--)
if (data[j - 1] > data[j]) // 逆序时交换
{
temp = data[j];
data[j] = data[j - 1];
data[j - 1] = temp;
}
}
printAll(data, num,"排序后:");
System.out.println("\n");
}
// 插入排序
public static void insertSort(int[] data, int num)// 插入排序
{
printAll(data, num,"排序前:");
System.out.println();
// 本算法是利用监视哨对R[1..n]进行直接插入排序
int i, j;
int temp;// 监视哨
for (i = 1; i < num; i++) // 假定第一个记录有序
{
temp = data[i]; // 将待排序记录放进监视哨
j = i - 1;
while (j >= 0) {
if (temp < data[j])
data[j + 1] = data[j];// 记录后移
else
break;
j--;
}
data[j + 1] = temp; // 将待排序记录放到合适位置
}
printAll(data, num,"排序后:");
System.out.println("\n");
}
// 选择排序
public static void selectSort(int[] data, int num) {
printAll(data, num,"排序前:");
System.out.println();
int i, j, small;
int temp;
for (i = 0; i < num - 1; i++) // 第i+1趟排序
{
small = i; // 设第i个数据元素关键字最小
for (j = i + 1; j < num; j++) // 寻找关键字最小的数据元素
if (data[j] < data[small])
small = j;// 记住最小元素的下标
if (small != i) // 当最小元素的下标不为i时交换位置
{
temp = data[i];
data[i] = data[small];
data[small] = temp;
}
}
printAll(data, num,"排序后:");
System.out.println("\n");
}
public static void printAll(int[] data, int num,String str)// 输出数组元素
{
System.out.print(str);
int i;
for (i = 0; i < num; i++)
System.out.print(data[i] + " ");
}
}
public class sortExer {
// 将一组由空格隔开的整数字符串转为数字数组
public static int[] getNumArr(String numStr) {
String[] strings = numStr.split(" ");
int[] numArr = new int[strings.length];
for (int i = 0; i < strings.length; i++) {
numArr[i] = Integer.parseInt(strings[i]);
}
return numArr;
}
public static void main(String[] args) {
Boolean flag = true;
Scanner scanner = new Scanner(System.in);
int value = -1;
while(flag) {
if(value==-1) {
System.out.println("-----------");
System.out.println("1 冒泡排序");
System.out.println("2 直接选择排序");
System.out.println("3 直接插入排序");
System.out.println("0 退出");
System.out.println("-----------");
System.out.println("请输入你想要使用的排序方法:");
value = scanner.nextInt();
scanner.nextLine();
}
if(value == 0) {
System.out.println("感谢您的使用!");
break;
}
System.out.print("请输入你要排序的一组数据(空格隔开):");
String str = scanner.nextLine();
// System.out.println(Arrays.toString(getNumArr(str)));
int[] numArr;
try {
numArr = getNumArr(str);
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("输入待排序的数据格式不正确,请重新进行!");
continue;
}
//进行选择
switch (value) {
case 1:
Sort.bubbleSort(numArr, numArr.length);
break;
case 2:
Sort.selectSort(numArr, numArr.length);
break;
case 3:
Sort.insertSort(numArr, numArr.length);
break;
default:
break;
}
value = -1;//用来进行重新选择
}
}
}