import java.util.Scanner;
//此脚本在大牛的基础上修改完成
public class Test
{ /*
·冒泡排序是依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第一个和第二个数,将大数放前,小数放后。如此继续,直至比较最后两个数,将大数放前,小数放后。然后下一行再进行重复操作。
·选择排序是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。
·插入排序(InsertionSort)把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的正确位置中。
· 希尔排序(ShellSort)是插入排序的一种。基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<……<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
*/
//static int a[] = new int[10];
//冒泡排序
public static void Bubblesort(int x[]){
for (int i = 0; i < x.length; i++) {
for(int j =i + 1; j < x.length; j++) {
if (x[i] > x[j]) {
int temp = x[i];
x[i] = x[j];
x[j] = temp;
}
}
}
for (int i = 0; i < x.length; i++) {
System.out.print(x[i]+" ");
}
System.out.println();
}
//选择排序
public static void Selectionsort(int x[]){
for (int i = 0; i < x.length; i++) {
int lowerIndex =i;
for(int j =i + 1; j < x.length; j++) {
if (x[j] > x[lowerIndex]) {
lowerIndex = j;
}
}
int temp = x[i];
x[i] = x[lowerIndex];
x[lowerIndex] = temp;
}
for (int i = 0; i < x.length; i++) {
System.out.print(x[i]+" ");
}
System.out.println();
}
//插入排序
public static void Insertionsort(int x[]){
for (int i = 1; i < x.length; i++) {//i从1开始,因为第一个数已经排列好
for(int j =i; j >0; j--) {
if (x[j] > x[j-1]) {
int temp = x[j];
x[j] = x[j-1];
x[j-1] = temp;
}
}
}
for (int i = 0; i < x.length; i++) {
System.out.print(x[i]+" ");
}
System.out.println();
}
//希尔排序
public static void ShellSort(int x[]){
for (int increment=x.length/2;increment>0;increment/=2) {
//循环每个组内排序
for (int i=increment;i<x.length;i++) {
int temp =x[i];
int j =0;
for(j=i;j>=increment;j-=increment) {
if(temp<x[j-increment]) {
x[j]=x[j-increment];
}else {
break;
}
}
x[j]=temp;
}
}
for (int i = 0; i < x.length; i++) {
System.out.print(x[i]+" ");
}
System.out.println();
}
//对比输出
public static void All(int x[]){
System.out.println("还没有实现");
}
//接收数据
public static int[] Receive(){
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in );
System.out.println("请输入一串整数并在输入时用英文逗号隔开:");
String inputString=sc.next().toString();
String stringArray[]=inputString.split(",");
int num[]=new int[stringArray.length];
for(int i=0;i<stringArray.length;i++){
num[i]=Integer.parseInt(stringArray[i]);
//System.out.print(num[i]+" ");
}
return num; //函数之间的参数传递
}
//主函数
public static void main(String[] args)
{
for(@SuppressWarnings("unused")
int i=0;;i++) {
System.out.println("---1、冒泡排序---");
System.out.println("---2、选择排序 ---");
System.out.println("---3、插入排序 ---");
System.out.println("---4、希尔排序 ---");
System.out.println("---5、对比输出 ---");
//System.out.println("---5、退出 ---");
System.out.print("请选择:");
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
int ch = sc.nextInt();
switch(ch){
case 1:
System.out.println("---1、冒泡排序---");
int a[] = Receive();
Bubblesort(a);
break;
case 2:
System.out.println("---2、选择排序---");
//int b[] = {1,2,3,9,7,0,4,5,6,8};
//Selectionsort(w);
int b[] = Receive();
Selectionsort(b);
break;
case 3:
System.out.println("---3、插入排序 ---");
int c[] = Receive();
Insertionsort(c);
break;
case 4:
System.out.println("---4、希尔排序 ---");
int d[] = Receive();
ShellSort(d);
break;
case 5:
System.out.println("---5、对比输出 ---");
int e[] = Receive();
System.out.println("---1、冒泡排序---");
Bubblesort(e);
System.out.println("---2、选择排序---");
Selectionsort(e);
System.out.println("---3、插入排序---");
Insertionsort(e);
System.out.println("---4、希尔排序---");
ShellSort(e);
break;
}
}
}
}
冒泡、选择、插入、希尔排序
最新推荐文章于 2022-02-21 23:08:58 发布