• 排序算法


    尝试用java写一个快速排序算法,算法还是大二学的了,为了准备大三的面试,还是手打一遍看看bug。

     1 package sort;
     2 
     3 import java.util.Random;
     4 
     5 public class QuickSort {
     6     public static int[] quickSort(int[] arr,int L,int R) {
     7         if(L>=R) { //bug
     8             return arr;
     9         }
    10         int base=arr[L];
    11         int left=L;
    12         int right=R;
    13         while(left<right) {
    14             if(arr[right]<base) {
    15                 arr[left]=arr[right];
    16                 while(left<right) {
    17                     if(arr[left]>base) {
    18                         arr[right]=arr[left];
    19                         break;
    20                     }else {
    21                         left++;
    22                     }
    23                 }
    24             }else {
    25                 right--;
    26             }
    27         }
    28         arr[left]=base;
    29         arr=quickSort(arr,L,left);
    30         arr=quickSort(arr,left+1,R);
    31         return arr; 
    32     }
    33     
    34     public static void main(String[] args) {
    35         Random rd=new Random();
    36         int n=rd.nextInt(10)+5;
    37         int[] arr= new int[n]; 
    38         for(int i1=0;i1<n;i1++) {
    39             arr[i1]=rd.nextInt(100);
    40         }
    41         int[] arr1=quickSort(arr,0,arr.length-1);    
    42         for(int i=0;i<arr1.length;i++) {
    43             System.out.print(arr1[i]+"  ");
    44         }
    45     }
    46 }

    bug:第一次写的判断条件是if(L==R),偶尔会遇到数组下标越界的错误,经排查,错误原因与第30行有关。假设数组为{1,2},排序过程中L=0,R=1,并且left=right=1的时候,会进行第29和第30行的操作arr=quickSort(arr,L,left);arr=quickSort(arr,left+1,R);  第30行传入值的时候,left+1变成2,数组越界。

  • 相关阅读:
    字符串分割并按大小排序
    为人之气
    RMQ
    线段树
    算法中的数学
    动态规划(DP)
    图的表示
    广度优先搜索(BFS)
    深度优先搜索(DFS)
    MyBatis(3.2.3)
  • 原文地址:https://www.cnblogs.com/liumaowu/p/9156375.html
Copyright © 2020-2023  润新知