• DSA-interview-快速排序笔记


    http://blog.csdn.net/morewindows/article/details/6684558#

        public static int partition(int s[], int left, int right)
        {
            int i = left;
            int j = right;
            int x = s[left];
            while (i < j)//---------------因为i=j的时候就是结束这个小过程的时候。所以在i=j的那一刻停止就可以了
            {
                while (i < j&&s[j] >= x)//【两个while中需要有一个=x的】
                    j--;
                if(i<j)//------因为出while的时候可能i=j了,这里保证在不等的时候填坑,并移动
                {
                    s[i]=s[j];
                    i++;
                }
                while (i < j&&s[i] < x)//-----------同理,s[i]<x;
                  i++;
                if(i<j)
                {
                    s[j]=s[i];
                    j--;
                }
                
            }
            s[i] = x;
            return i;
        } 
        public static void quick_sort(int s[], int left,int right)
         { 
            if (s == null||left>=right)//------这里关于空的检查。。。很奇怪----这是个问题待解决
                return;
            int g= partition(s, left, right);
             quick_sort(s, left, g - 1);//--------------------递归 
            quick_sort(s, left + 1, right); 
        }

    默写:(错误用黄色标出)

    int partition(int s[], int left, int right)
    {
    	int i = left;
    	int j = right;
    	int x = s[0];--------应该为s[left]----不一定是非从零开始啊。
    	while (i < j)---------------因为i=j的时候就是结束这个小过程的时候。所以在i=j的那一刻停止就可以了
    	{
    		while (i <= j&&s[j] < x)-----------while(i<j&&s[j]>=x)【两个while中需要有一个=x的】
    			j--;
    		s[i] = s[j];-----------------------if(i<j)------因为出while的时候可能i=j了,这里保证在不等的时候填坑,并移动
                                   {s[i]=s[j];
                                    i++;} while (i <= j&&s[i] > x)-----------同理,s[i]<x; i++; s[j] = s[i]; } s[i] = x; return x;--------------------------返回的是坑,而不是坑里的东西 return i } void quick_sort(int s[], int left,int right) { if (s == NULL||left>=right)------这里关于空的检查。。。很奇怪----这是个问题待解决 return; int g = partition(s, left, right); quick_sort(s, left, g - 1);--------------------递归 quick_sort(s, left + 1, right); }

      整合成一个函数的时候

    注意:

    ①将返回值设为void

    ②在最开始检查left和right的大小----如果不检查会造成堆栈溢出----原因是最后递归是要g-1和g+1的,如果不检查会超出范围

     

    平均时间复杂度O(nlogn)

    最坏:O(n^2)

    //未进行思考原因。。

    //0227整理

    //0228复习第一次:

       错误点:忘记在函数最开始验证low high的大小。注意②

    //0305第二次复习!俩错误!!!注意那俩全都犯了!

    又忘记最开始验证low和high的大小!,因为最开始想法是只想第一趟,后来又想到不用俩函数就能搞定,却忘记在最开始把判断写上去!!切记切记。最后写递归的时候,写完记得反省一下!!!

    还出现 最后return的不是坑里的东西!!!!是坑的index!!!!!

    //0415````又忘了·····

    //0426 没有用整合的方式,但是 在while循环以及内部的 判断 都是保证i<j的,而不是i<=j,

    -因为i=j的时候就是结束这个小过程的时候。所以在i=j的那一刻停止就可以了
            {
  • 相关阅读:
    PAT 1037. 在霍格沃茨找零钱(20)
    PAT 1036. 跟奥巴马一起编程(15)
    Topcoder SRM633 DIV2 解题报告
    HDU 4565 So Easy! 矩阵快速幂 + 共轭数
    HDU 2256 Problem of Precision 矩阵快速幂 + 共轭数
    FZU 1683 纪念SlingShot 矩阵快速幂
    CodeForces 185A Plant 矩阵快速幂
    HDU 2604 Queuing 矩阵快速幂
    HDU 1575 Tr A 矩阵快速幂
    HDU 1757 A Simple Math Problem 矩阵快速幂
  • 原文地址:https://www.cnblogs.com/Cherrylalala/p/6475849.html
Copyright © 2020-2023  润新知