A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© s526349668 中级黑马   /  2014-7-6 16:46  /  1369 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 s526349668 于 2014-7-6 21:10 编辑

这个是快速排序的代码,从if(key>array[j]就不理解了
private static void quickSort ( int[] array, int start, int end )
    {
        if (start < end)
        {
                //将赋值给key
            int key = array[start];
            int i = start;
            for ( int j = start + 1; j < end + 1; j++ )
            {
                if (key > array[j])
                {
                    int temp = array[j];
                    array[j] = array[i + 1];
                    array[i + 1] = temp;
                    i++;
                }
            }
            array[start] = array;
            array = key;
            quickSort (array, start, i - 1);
            quickSort (array, i + 1, end);
        }
    }

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

5 个回复

倒序浏览
快速比较,然后位置调换
回复 使用道具 举报
本帖最后由 fantacyleo 于 2014-7-6 19:07 编辑

这段快排代码思路不是很清晰。我觉得比较好理解的快排思路是这样的:

在待排序数组中选一个数作为key,一般选数组首元素。然后通过交换,让数组变成这样:key元素左边的元素都小于key,key元素右边的元素都大于等于key。接下来对key左右的两个子数组分别排序就可以了。图示如下:



实现代码:


  1. void quickSort(int[] arr, int start, int end) {

  2.     if(start >= end)
  3.         return;

  4.     int key = arr[start];
  5.     int i = start, j = end;

  6.     while(true) {

  7.         // 从尾部开始找到一个小于key的元素
  8.         while(i < j && arr[j] >= key)
  9.             j--;

  10.         // 从头部开始找到一个大于或等于key的元素
  11.         while(i < j && arr[++i] < key)
  12.             ;

  13.         // 交换这两个数
  14.         swap(arr, i, j);

  15.         // i,j相遇,查找结束
  16.         if(i == j)
  17.             break;


  18.     }

  19.     // key左边的元素都小于key,key右边的元素都大于或等于key
  20.     swap(arr, start, j);

  21.     // 排序key左右两个子数组
  22.     quickSort(arr, start, j - 1);
  23.     quickSort(arr, j + 1, end);


  24. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
fantacyleo 发表于 2014-7-6 18:40
这段快排代码思路不是很清晰。我觉得比较好理解的快排思路是这样的:

在待排序数组中选一个数作为key,一 ...

太感谢了啊
回复 使用道具 举报

把帖子状态改成”提问结束“吧,这样就可以向版主求技术分了:lol
回复 使用道具 举报
android0276 来自手机 中级黑马 2014-7-6 19:43:48
地板
java直接调类排序啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马