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)

  • 相关阅读:
    计算机入门知识
    iOS学习之-开机引导图
    学习笔记之09-空指针和野指针
    学习笔记之08-self关键字
    学习笔记之07-自定义构造方法和description方法
    学习笔记之06-点语法
    学习笔记之05-第一个OC的类
    学习笔记之04-第一个OC程序解析
    学习笔记之03-第一个OC程序
    hdoj1016 [dfs]
  • 原文地址:https://www.cnblogs.com/wl889490/p/12824025.html
Copyright © 2011-2022 走看看