java实现冒泡,选择,插入,快速排序
来源:互联网 发布:pdf页面合并软件 编辑:程序博客网 时间:2024/05/23 12:48
import java.util.Arrays;public class ArraysSort {public static void main(String[] args) {//在0-99范围内获取20个随机整数int[] data = getRandomArray(20,100);System.out.println("排序前:"+Arrays.toString(data));// bubble(data);// select(data);insert(data);//quick(data);System.out.println("排序后:"+Arrays.toString(data));System.out.println("是否有序:"+isOrdered(data));}/** * 判断数组是否有序(从小到大) * @param data * @return */private static boolean isOrdered(int[] data){for(int i = 0 ;i<data.length - 1;i++){if(data[i] > data[i+1]){return false;}}return true;}/** * 得到长度为length的随机不重复数组 * * @param length 要获取的数据长度 * @param scope要获取数据的范围[0-scope) * @return */public static int[] getRandomArray(int length,int scope) {if(length > scope){throw new RuntimeException("数据长度不能比数据范围大!");}int[] data = new int[length];Arrays.fill(data, Integer.MAX_VALUE);// 这样即就不会默认为0了// 存入0-99的随机不重复数for (int i = 0; i < data.length; i++) {int temp;do {temp = (int) (Math.random() * scope);} while (contain(data, temp));// 如果该数已经存在,则继续取data[i] = temp;}return data;}/** * 判断数组中是否包含key * * @param data * @param key * @return */private static boolean contain(int[] data, int key) {// data默认为0(上面赋值为Integer.MAX_VALUE),当0跟0比较会错误的判断成包含for (int i = 0; i < data.length; i++) {if (data[i] == key)return true;}return false;}// 冒泡排序public static void bubble(int[] data) {//最后一次不用比for (int i = 0; i < data.length - 1; i++) {for (int j = 0; j < data.length - 1 - i; j++) {if (data[j] > data[j + 1]) {int temp = data[j];data[j] = data[j + 1];data[j + 1] = temp;}}}}// 选择排序public static void select(int[] data) {int min;//最后一个数不用排序for (int i = 0; i < data.length - 1; i++) {int k = i;min = data[i];for (int j = i; j < data.length; j++) {if (data[j] < min) {min = data[j];k = j;}}int temp = data[i];data[i] = data[k];data[k] = temp;}}// 插入排序public static void insert(int[] data) {// 第一个数不用动for (int i = 1; i < data.length; i++) {// 从第二个数开始,要比较的数for (int j = 0; j < i; j++) {// 被比较的数if(data[i] <data[0]){//插入在左边,第0到i-1的数移到iint temp = data[i];for (int k = i - 1; k >= j + 1; k--) {data[k + 1] = data[k];}data[0] = temp;}else if (data[i] >= data[j] && data[i] <= data[j + 1]) {// 插在中间(j+1的位置)int temp = data[i];for (int k = i - 1; k >= j + 1; k--) {// 将j+1到i-1整体后退到,i的位置data[k + 1] = data[k];}data[j + 1] = temp;} // else就不用动了}}}/** * 快速排序 * @param data */public static void quick(int[] data){quick(data, 0, data.length-1);}private static void quick(int[] data,int p,int r){if(p < r){//部分排序int q = partSort(data, p, r);//q为得到的中间值,此时左边的数 < data[p],右边的数 > data[p]//递归排序左边quick(data, 0, q-1);//递归排序右边quick(data, q+1, r);}}private static int partSort(int[] data,int p,int r){int i = p-1;for(int j = p ;j<=r-1;j++){//此时i+1记录着比data[r]大的数,是准备要换位置的,换掉位置之后(小的数倍换来)//即i又向前进一格,继续记录着i+1的大数的最左边的位置。这个位置到到达最后的//时候会跟data[r]key换掉,即现在进变成了左边是小于key的数,右边是大于key的数if(data[j] <= data[r]){i++;change(data,i,j);}}change(data, i+1, r);return i+1 ;}private static void change(int[] data,int x,int y ){if(x == y){//相同的不换,节约时间return ;}int temp = data[x];data[x] = data[y];data[y] = temp;}}
阅读全文
0 0
- java实现冒泡,选择,插入,快速排序
- java实现冒泡排序,插入排序,选择排序,快速排序
- 冒泡、插入、快速、选择排序的java实现
- java简单实现冒泡、快速、选择、插入排序算法
- Java实现冒泡,快速,选择,插入排序算法
- java实现排序(冒泡、选择、快速、插入)
- c++实现冒泡,选择,插入,快速排序
- 【Javascript】实现快速,选择,冒泡,插入排序
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- java插入,希尔,快速,冒泡,选择排序
- Java实现排序(插入排序+冒泡排序+选择排序+ Shell排序+快速排序)
- Java 排序 快速排序 冒泡排序 选择排序 插入排序
- Java实现排序(快速排序、冒泡排序、选择排序、基数排序、插入排序)
- Java分别实现冒泡排序、插入排序、快速排序、选择排序、交换排序
- (一)Java实现排序,选择排序,快速排序,冒泡排序,插入排序
- Java实现冒泡排序、快速排序、选择排序、插入排序和归并排序
- 选择排序&插入排序&冒泡排序&快速排序算法实现
- python 实现插入排序,冒泡排序,快速排序,选择排序
- 操作系统,eclise,JDK 位数关系
- SQL 数据库(二)
- hdu4335 降幂公式 模循环节
- unity3d关闭输入法,密码输入框禁止输入汉字
- spring和springmvc的区别
- java实现冒泡,选择,插入,快速排序
- I/O复用
- dll 详解与调用
- IP问问:网络欺诈的常见方式
- Android开发中出现的错误集(不断更新)
- 在SpringMVC中使用JSON的配置
- MATLAB 2015B 破解版 安装详细教程
- C语言实现并行求和算法
- androidstudio cmake指定so文件输出目录