目录:
排序算法-java实现_stoneWang_L的博客-CSDN博客
1)冒泡排序
冒泡排序-java实现_排序前遍历输出,使用选择排序和冒泡排序,分别把选择排序和冒泡排序封装成两个sortarray_stoneWang_L的博客-CSDN博客
2)插入排序
插入排序-java实现_stoneWang_L的博客-CSDN博客
3)选择排序
选择排序-java实现_stoneWang_L的博客-CSDN博客
4)快速排序
快速排序-java实现_stoneWang_L的博客-CSDN博客
5)堆排序
堆排序-java实现_stoneWang_L的博客-CSDN博客
6)归并排序
归并排序-java实现_stoneWang_L的博客-CSDN博客
希尔排序
希尔安排的原理,网上有很多,不加赘述。如果不了解的,可以看看这篇文章:
java实现希尔排序(思路与实现)_疯狂1024的博客-CSDN博客
我直接写代码:
Code:
1、ShellSort.java
package DataStr;
import java.util.Arrays;
public class ShellSort {
public static void main(String[] args) {
int[] arr = SortTestHelper.getRandomArray(15, 0, 10);
System.out.println("希尔排序前:"+Arrays.toString(arr));
shellSort(arr);
System.out.println("希尔排序后:"+Arrays.toString(arr));
}
/**
* 希尔排序
* @param arr 待排数组
*/
public static void shellSort(int[] arr) {
for(int gap=arr.length/2; gap>0; gap/=2) { /*步长逐渐减小*/
for(int i=gap; i<arr.length; i++) { /*在同一步长内*/
//同一步长内排序方式是插入排序
int temp = arr[i], j; //待排元素
//j-gap代表有序数组中最大数的下标,j-pag表示有序数组的前一个元素,减pag是减去偏移量就是步长
for(j=i; j>=gap && temp<arr[j-gap]; j-=gap)
arr[j] = arr[j-gap]; //原有序数组最大的后移一位
arr[j] = temp; //找到了合适的位置插入
}
}
}
}
package DataStr;
import java.util.Arrays;
public class ShellSort {
public static void main(String[] args) {
int[] arr = SortTestHelper.getRandomArray(15, 0, 10);
System.out.println("希尔排序前:"+Arrays.toString(arr));
shellSort(arr);
System.out.println("希尔排序后:"+Arrays.toString(arr));
}
/**
* 希尔排序
* @param arr 待排数组
*/
public static void shellSort(int[] arr) {
for(int gap=arr.length/2; gap>0; gap/=2) { /*步长逐渐减小*/
for(int i=gap; i<arr.length; i++) { /*在同一步长内*/
//同一步长内排序方式是插入排序
int temp = arr[i], j; //待排元素
//j-gap代表有序数组中最大数的下标,j-pag表示有序数组的前一个元素,减pag是减去偏移量就是步长
for(j=i; j>=gap && temp<arr[j-gap]; j-=gap)
arr[j] = arr[j-gap]; //原有序数组最大的后移一位
arr[j] = temp; //找到了合适的位置插入
}
}
}
}
2、测试数组辅助类
SortTestHelper.java
package DataStr;
public class SortTestHelper {
/**
*
* @param n 生成n个元素的随机数组
* @param rangeL 随机范围[rangeL
* @param rangeR rangeR]
* @return 返回一个随机 int 型数组
*/
public static int[] getRandomArray(int n, int rangeL, int rangeR) {
int[] arr = new int[n];
for(int i=0; i<n; i++) {
arr[i] = (int)(Math.random() * (rangeR - rangeL +1)) + rangeL;
}
return arr;
}
}
package DataStr;
public class SortTestHelper {
/**
*
* @param n 生成n个元素的随机数组
* @param rangeL 随机范围[rangeL
* @param rangeR rangeR]
* @return 返回一个随机 int 型数组
*/
public static int[] getRandomArray(int n, int rangeL, int rangeR) {
int[] arr = new int[n];
for(int i=0; i<n; i++) {
arr[i] = (int)(Math.random() * (rangeR - rangeL +1)) + rangeL;
}
return arr;
}
}
结果: