排序算法

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

转载于:https://www.cnblogs.com/liumaowu/p/9156375.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值