1、JAVA 排序汇总 收藏 package com.wepull.jbs.lesson4;import java.util.Random* 排序测试类* 排序算法的分类如下:* 1.插入排序(直接插入排序、折半插入排序、希尔排序) ;* 2.交换排序(冒泡泡排序、快速排序) ; * * 3.选择排序(直接选择排序、堆排序) ;* * 4.归并排序;* 5.基数排序。 * 关于排序方法的选择:* (1)若 n 较小(如 n50),可采用直接插入或直接选择排序。* 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。* (2)若文件初始状态基本有序(
2、指正序),则应选用直接插人、冒泡或随机的快速排序为宜;* (3)若 n 较大,则应采用时间复杂度为 O(nlgn)的排序方法:快速排序、堆排序或归并排序。public class SortTest * 初始化测试数组的方法* return 一个初始化好的数组public int createArray() Random random = new Random();int array = new int10;for (int i = 0; i dataj + 1) / 交换相邻两个数swap(data, j, j + 1); else if (sortType.equals(“desc“) /
3、倒排序,从大排到小/ 比较的轮数for (int i = 1; i dataindex) index = j;/ 交换在位置 data.length-i 和 index(最大值)两个数swap(data, data.length - i, index); else if (sortType.equals(“desc“) / 倒排序,从大排到小int index;for (int i = 1; i 0 / 从右向左找第一个小于 x 的数if (i x) i+; / 从左向右找第一个大于 x 的数if (i 1; / 相当于 mid = (low + high)/ / 2,但是效率会高些if (d
4、ata datasetendIndex| beginIndex endIndex)return -1;if (data datasetmidIndex) return binarySearch(dataset, data, midIndex + 1, endIndex); else return midIndex;* 二分查找特定整数在整型数组中的位置(非递归)* 查找线性表必须是有序列表* paramdataset* paramdata* returnindexpublic int binarySearch(int dataset, int data) int beginIndex = 0;
5、int endIndex = dataset.length - 1;int midIndex = -1;if (data datasetendIndex| beginIndex endIndex)return -1;while (beginIndex 1; / 相当于 midIndex =/ (beginIndex +/ endIndex) / 2,但是效率会高些if (data datasetmidIndex) beginIndex = midIndex + 1; else return midIndex;return -1;public static void main(String ar
6、gs) SortTest sortTest = new SortTest();int array = sortTest.createArray();System.out.println(“=冒泡排序后(正序)=“);sortTest.bubbleSort(array, “asc“);System.out.println(“=冒泡排序后(倒序)=“);sortTest.bubbleSort(array, “desc“);array = sortTest.createArray();System.out.println(“=倒转数组后=“);sortTest.reverse(array);arra
7、y = sortTest.createArray();System.out.println(“=选择排序后(正序)=“);sortTest.selectSort(array, “asc“);System.out.println(“=选择排序后(倒序)=“);sortTest.selectSort(array, “desc“);array = sortTest.createArray();System.out.println(“=插入排序后(正序)=“);sortTest.insertSort(array, “asc“);System.out.println(“=插入排序后(倒序)=“);sor
8、tTest.insertSort(array, “desc“);array = sortTest.createArray();System.out.println(“=快速排序后(正序)=“);sortTest.quickSort(array, “asc“);sortTest.printArray(array);System.out.println(“=快速排序后(倒序)=“);sortTest.quickSort(array, “desc“);sortTest.printArray(array);System.out.println(“=数组二分查找=“);System.out.println(“您要找的数在第“ + sortTest.binarySearch(array, 74)+ “个位子。 (下标从 0 计算)“);