排序算法

尝试用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,数组越界。

posted @ 2018-06-08 16:34  陆卯伍  阅读(151)  评论(0编辑  收藏  举报