java中快速排序有时成功有时失败-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

java中快速排序有时成功有时失败

2016-03-18 10:20:50 1713 1

代码:

public class Sorting {
public static void main(String[] args) {
// TODO Auto-generated method stub
int len = 10;
int arr[] = new int [len];
for(int i=0;i<len;i++)
{
//Math.random()表示0~1之间的随机数
arr[i] = (int)(Math.random()*10000);
}
Quick_Sort qs = new Quick_Sort();
qs.sort(arr);
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
}
class Quick_Sort
{
public void sort(int arr[])
{
int f = 0;
int l = (arr.length-1);
this.digui(f, l, arr);
}
private void digui(int first,int last,int arr[])
{
int temp = arr[first];
int f = first;
int l = last;
while(f<l)
{
while(f<l&&temp<=arr[l])
{
l--;
}
arr[f] = arr[l];
while(f=arr[f])
{
f++;
}
arr[l] = arr[f];
}
arr[f] = temp;
if(first<last)
{
this.digui(first, f-1, arr);
this.digui(f+1,last, arr);
}
}
}
取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 19:06:02

    程序运行了下,会数组越界.

     public static void quickSort(int[] arr,int low,int high){
            if(high > low){
                int part = partition(arr,low,high);
                //System.out.println("part="+part);
                quickSort(arr,low,part - 1);
                quickSort(arr,part+1,high);
            }
        }
        //找寻分界点
        public static int partition(int[] arr,int low , int high){
            int first = low;
            int pivot = arr[low];
            low++;
            while(high > low){
                //从左边找比pivot大的数
                while(low <= high && arr[low] <= pivot ){
                    low++;
                }
                //从右边找比pivot小或等于的数
                while(high >= low && arr[high] > pivot ){
                    high--;
                }
                //交换
                if(high > low){
                    int temp = arr[high];
                    arr[high] = arr[low];
                    arr[low] = temp;
                }
            }
            //此时high = low - 1;
            //且high之前的元素都小于等于pivot,low之后的元素都大于pivot
            //System.out.println("low="+low+";high="+high+":"+Arrays.toString(arr));
            if(high > first){
                int temp = arr[high];
                arr[high] = arr[first];
                arr[first] = temp;
                //System.out.println("part="+high+":"+Arrays.toString(arr));
                return high;
            }else{
                //System.out.println("part="+high+":"+Arrays.toString(arr));
                return first;
            }
        }
    0 0
相关问答

40

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 144761浏览量 回答数 40

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 226231浏览量 回答数 162

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 337095浏览量 回答数 8

13

回答

[@饭娱咖啡][¥20]我想知道 Java 关于引用那一块的知识

心意乱 2018-10-31 18:44:12 142480浏览量 回答数 13

111

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 295655浏览量 回答数 111

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 147278浏览量 回答数 22

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 646870浏览量 回答数 18

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 146072浏览量 回答数 31

42

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 137152浏览量 回答数 42

10

回答

[@墨玖tao][¥20]为什么流式处理框架都是 java 写成的,JVM 是不是在流和批存在着特殊优势。还有分布式资源调度,感觉Mesos 的成长速度跟不上 Yarn。这是为什么?

管理贝贝 2018-10-23 13:18:03 136490浏览量 回答数 10
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载