zoukankan      html  css  js  c++  java
  • 快速排序(递归算法)分析

    基于分治策略:把一个问题划分成几个小问题,分别对小问题求解,把答案组合在一起,即为原问题的解

    升序:

    1>  找出位于待排序序列中间位置的值,赋给mid,把小于mid的值都移动到左半部分,大于mid的值都移动右半部分。

    2> 分别递归左半部分和右半部分~·

    	void qsort(int l,int r)
    	{
    
    		int i,j,mid,p;
    		i=l;j=r;   
    		mid=a[(l+r)/2];                       //将当前序列在中间位置的数定义为分隔数
    		do
    		{
    			while (a[i]<mid)  {i++;}         //在左半部分寻找比中间数大的数
    			while (a[j]>mid)  {j--;}           //在右半部分寻找比中间数小的数
    			if (i<=j)
    			{                                     //若找到一组与排序目标不一致的数对则交换它们
    				p=a[i];a[i]=a[j];a[j]=p;
    				i++;j--;                                    //继续找
    			}
    		}while(i<=j);                           //注意这里要有等号
    		if (l<j) qsort(l,j);                     //若未到两个数的边界,则递归搜索左右区间
    		if (i<r) qsort(i,r);
    	}


  • 相关阅读:
    5. Longest Palindromic Substring
    56. Merge Intervals
    386. Lexicographical Numbers
    42. Trapping Rain Water
    *[topcoder]BracketExpressions
    [codility]CountDiv
    *[codility]MinAvgTwoSlice
    *[codility]MissingInteger
    [mock]7月25日
    网络广告术语
  • 原文地址:https://www.cnblogs.com/frankM/p/4399555.html
Copyright © 2011-2022 走看看