你是否也被java实现排序算法搞的头疼?

排序算法都是处理数据的一些思想,代码是次要的,重点还是学习如何处理问题的思想。排序一个最基本的前提肯定是比较后交换,所以基本在每个算法里都有swap(交换)的过程,这里都借助temp来实现。
这里总结一部分排序算法,算法深似海,多了我自己总结完也记不住。只有3+1种。
冒泡排序都学恶心了,这里不做过多讲解了。

    void bubbleSort(int[] array){
        for (int i = 0;i<array.length-1;i++){
            for (int j = i+1;j<array.length;j++){
                if (array[i]>array[j]){
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
    }

快速排序相信大家也不陌生,思想就是定一个判断标准,把比它小的放到前面,比它大的放到后边,在对前后两部分分别这样排序。

void quickSort(int[] array,int start,int end){
        if (start<end){
            int flag = array[start];
            int i = start;
            for (int j = start+1;j<end;j++){
                if (flag>array[j]){
                	++i;
                    int temp = array[i];
                    array[i] = array[end];
                    array[end] = temp;
                }
                array[start] = array[i];
                array[i] = flag;
                quickSort(array,start,i-1);
                quickSort(array,i+1,end);
            }
        }
}

插入排序我看过一个有趣的比较,好像打牌一样,每张牌插入到合适的位置,循环这样就可以得到最后一个排好序的结果。

void insertSort(int[] array){
        for (int i = 1;i<array.length;i++){
            int j = i+1;
            int temp = array[i];
            for (;j>0;j--){
                if (array[j]>temp){
                    array[j+1] = array[j];
                }else {
                    break;
                }
            }
            array[j+1] = temp;
        }
}

先学三种不嫌少,能敲出来就是一种进步。
最后为什么说是+1种,这种大家不用学啊,学了没有任何作用。
猴子排序(也有叫Bogo排序),目前看来是一种毫无用处的算法,主要思想就是把数字都随机打乱再循环验证顺序,直到反复打乱成排好顺序。也是一种不需要换位的排序。(这里代码我不敲了直接找一份复制粘贴了)


private static final Random random = new Random();
          
private static void bogoSort(int[] array) {
    while (!isOrder(array)) {
        for (int i = 0; i < array.length; i++) {
            int randomPosition = random.nextInt(array.length);
            int temp = array[i];
            array[i] = array[randomPosition];
            array[randomPosition] = temp;
        }
    }
}
          
private static boolean isOrder(int[] array) {
    for (int i = 0; i < array.length - 1; i++) {
        if (array[i] > array[i + 1]) return false;
    }
    return true;

其余的排序有缘再写吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值