zoukankan      html  css  js  c++  java
  • 快排算法

      public void quickSort(int[] nums,int left,int right)
            {
                if (nums.Length==0||nums==null||left>right)
                {
                    return;
                }
                int i = left;
                int j = right;
                int key = nums[left];////这个key是会变的,以每次数组的最左边一个数为key,即比较的对象,i往右移遇到比key大的数就停住,j往左移遇到比key小的数就停住,两个都停住时
                while (i!=j)//也可以是while (i<j)
                {
                    while (nums[j]>=key&&j>i)
                    {
                        j--;
                    }
                    while (nums[i]<=key&&i<j)
                    {
                        i++;
                    }
                    //nums[i]与nums[j]互换,前提是i<j(大前提)
                    if (i<j)
                    {
                        int temp = nums[i];
                        nums[i] = nums[j];
                        nums[j] = temp;
                    }
                }
              
                nums[left] = nums[i];//因为nums[i]永远会比key小,因为他会与nums[j]互换,而nums[j]只有比key小的时候才会停住
                nums[i] = key;
                quickSort(nums, left, i - 1);
                quickSort(nums, i + 1, right);
              
            }

    时间复杂度为O(nlogn)

  • 相关阅读:
    babel初学教程
    手机cs端改变跳转方式
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
    Linux下cp直接覆盖不提示的方法!
    JAVA中用CALENDAR类计算周和周的起始日期(转)
    [android反编译小结]apktool/ AXMLPrinter2.jar/ dex2jar.bat/ jdgui/
    jquery 新手学习常见问题解决方法
    Linux系统中gb2312与utf8相互切换
    xml解析循环参数实例
    java 计算时间差
  • 原文地址:https://www.cnblogs.com/wl889490/p/12824025.html
Copyright © 2011-2022 走看看