您当前的位置: 首页 >  c#

Jave.Lin

暂无认证

  • 2浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

快排算法(C#版)

Jave.Lin 发布时间:2017-12-27 16:02:17 ,浏览量:2

代码
        // 参考:书籍:《啊哈!算法》,这本书真心不错,推荐一下
        // 以下代码是看完算法思路后马上写下的代码,写完后再优化一下工整度,未参考书中写法
        // author : jave.lin
        // date : 2017-12-27
        static int[] qs(int[] arr, int left, int right)
        {
            if (left < right)
            {
                var i = left; var j = right;
                var b = arr[i]; var t = 0;
                while (true)
                {
                    for (; j > i; --j) if (i == j || arr[j] < b) break;
                    for (; i < j; ++i) if (i == j || arr[i] > b) break;
                    if (i == j)
                    {
                        arr[left] = arr[i];
                        arr[i] = b;
                        qs(arr, left, i - 1);
                        qs(arr, i + 1, right);
                        return arr;
                    }
                    else
                    {
                        t = arr[i];
                        arr[i] = arr[j];
                        arr[j] = t;
                    }
                }
            }
            return arr;
        }
思路
1. 确定该次的排序范围,就是qs参数中的left, right,如果leftb,就记录起当前的位置(j),并退出遍历。
4. 遍历索引:i,再从左往右遍历,如果遍历索引i==j,或,arr[i]            
关注
打赏
1664331872
查看更多评论
0.0458s