选择排序
/**
* 希尔排序 针对有序序列在插入时采用交换法
* @param arr
*/
public static void sort(int []arr){
//
for(int i=0;i<arr.length-1;i++){
int max=i;
for (int j = i+1; j < arr.length ; j++) {
if(arr[j]>arr[max]){
max=j;
}
}
swap(arr,i,max);
}
}
/**
* 交换数组元素
* @param arr
* @param a
* @param b
*/
//完成数组两元素间交换
public static void swap(int[] arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
插入排序
public void instertSort() {
int[] array={20 ,30 ,40 ,10, 60 ,50 };
int i,j,temp;
for(i=1;i<array.length;i++) {
System.out.println("第"+i+"次循环"+","+"i=" + i);
/*
* 第一个for循环
* 把数组分成两部分,右边为未排序,左边为已排序
* 记录排序与未排序分割点temp(temp为下一个排序对象)
*/
temp=array[i];
for(j=i-1;j>=0;j--) {
System.out.println("j=" + j);
/*
* 第二个for循环
* 将排序对象temp与已排序数组比较
* 当temp比最近左边的数大时(按从小到大循序排列时)
* 直接结束本次循环,进行下一个数排序
* 否则比左边这个数小时将这个数后移,腾出这个数的位置
*/
if (temp > array[j]) {
System.out.println(Arrays.toString(array));
break;
}else{
array[j+1] = array[j];
System.out.println(Arrays.toString(array));
}
}
array[j+1]=temp;
}
System.out.println(Arrays.toString(array));
}
希尔排序
/**
* 希尔排序 针对有序序列在插入时采用移动法。
* @param arr
*/
public static void sort1(int []arr){
//增量gap,并逐步缩小增量
for(int gap=arr.length/2;gap>0;gap/=2){
//从第gap个元素,逐个对其所在组进行直接插入排序操作
for(int i=gap;i<arr.length;i++){
int j = i;
int temp = arr[j];
for(;j-gap>=0 && temp>arr[j-gap];j-=gap){
//移动法
arr[j] = arr[j-gap];
}
arr[j] = temp;
}
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容