package sort;
public class SortAll {
/*
* 冒泡排序,选择排序,插入排序,希尔(Shell)排序 Java的实现
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] i={1, 5, 6, 12, 4, 9, 3, 23, 39, 403, 596, 87 };
System.out.println("---冒泡排序的结果:");
maopao(i);
System.out.println();
System.out.println("----选择排序的结果:");
xuanZe(i);
System.out.println();
System.out.println("----插入排序的结果:");
chaRu(i);
System.out.println();
System.out.println("----希尔(Shell)排序的结果:");
shell(i);
}
//冒泡排序:最大的元素就被移到了数列的末尾。如此反复这个过程n-1次后,整个数列就排序好了
public static void maopao(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:x){
System.out.print(i+" ");
}
}
//选择排序 :
/*找到一个极端值后放到数组的头或尾。
区别就在于选择排序用一个变量来记录找到的最小值,并且找到后只交换一次
*/
public static void xuanZe(int []y){
for(int i = 0;i <y.length;i++){
int lowerIndex=i;
for(int j=i+1;j<y.length;j++){
if(y[j]<y[lowerIndex]){
lowerIndex=j;
}
}
//交换
int temp=y[i];
y[i]=y[lowerIndex];
y[lowerIndex]=temp;
}
for (int i:y){
System.out.print(i+" ");
}
}
//插入排序:
public static void chaRu(int []x){
// i从一开始,因为第一个数已经是排好序的啦
//通过不断交换来排序
for(int i=1;i<x.length;i++)
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:x){
System.out.print(i+" ");
}
}
//希尔排序:分成若干的小组,在组内进行插入排序
public static void shell(int []x){
//分组
for(int increment=x.length/2;increment>0;increment=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:x){
System.out.print(i+" ");
}
}
}