四种排序算法

今天整理了一下几种常见的排序:冒泡,选择,插入,和快速排序算法实现。
第一种,冒泡排序:
具体实现:相邻的两个元素比较,后面的元素大于前面的元素,交换位置。

  public static int[] maopaoSort(int[] arr){
        for(int i=0;i<arr.length-1;i++){
           for(int j=1;j<arr.length-i;j++){
              if (arr[j-1]>arr[j]){
                  int temp=arr[j-1];
                  arr[j-1]=arr[j];
                  arr[j]=temp;
              }
           }
        }
        return arr;
    }

选择排序具体实现:每次把数组中第一个元素作为最小值(这里是最小值),然后在遍历其余数组之后做相互比较,小于最小值的就交换索引下标,最后,再与第一个元素进行交换。以此类推。得到一个排序后的数组

public static int[] selectSort(int[] arr){
        for(int i=0;i<arr.length-1;i++){
           int min=i;
           for(int j=i+1;j<arr.length-i;j++){
               if (arr[min]>arr[j]){
                   min=j;
               }
           }
           int temp=arr[i];
           arr[i]=arr[min];
           arr[min]=temp;
        }
        return arr;
    }

插入排序具体实现:每个数组可以分为预插入数组(右边),待插入数组(左边第一个元素,后续会增长),每次取出右边元素保存在一个临时变量中,然后和左边数组元素比较,小于则插入左边,大于则插入右边。代码实现

 public static int[] insert(int[] arr){
        for(int i=1;i<arr.length;i++){
            int temp=arr[i];
        
           int j;
           for(j=i-1;j>=0;j--){
              if (arr[j]>temp){
                  arr[j+1]=arr[j];
              }else{
                  break;
              }
           }
            arr[j+1]=temp;
        }
        return arr;
    }

其中第二层的for循环可以替换:

    int j=i-1;
            while (j>=0&&arr[j]>temp){
                arr[j+1]=arr[j];
                j--;
            }

快速排序具体实现:在一个数组中定义两个索引下标i,j分别为最左边的元素和最右边的元素。并选择第一个元素为基数,右边小于基数停止,和左边大于基数则停止,最后交换两者元素。然后又在小的子区间中进行。

 public static void quickSort(int[] arr,int low,int high){
        int i,j,temp,t;
        if(low>high){
            return;
        }
        i=low;
        j=high;
        //temp就是基准位
        temp = arr[low];
        while (i<j) {
            //先看右边,依次往左递减
            while (temp<=arr[j]&&i<j) {
                j--;
            }
            //再看左边,依次往右递增
            while (temp>=arr[i]&&i<j) {
                i++;
            }
            //如果满足条件则交换
            if (i<j) {
                t = arr[j];
                arr[j] = arr[i];
                arr[i] = t;
            }

        }
        //最后将基准为与i和j相等位置的数字交换
        arr[low] = arr[i];
        arr[i] = temp;
        //递归调用左半数组
        quickSort(arr, low, j-1);
        //递归调用右半数组
        quickSort(arr, j+1, high);
    }

总结;
花费的时间:快速排序《插入排序《选择排序《冒泡排序

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值