zoukankan      html  css  js  c++  java
  • 三部排序|2013年蓝桥杯B组题解析第六题-fishers

    三部排序|

    一般的排序有许多经典算法,如快速排序、希尔排序等。
    但实际应用时,经常会或多或少有一些特殊的要求。我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。
    比如,对一个整型数组中的数字进行分类排序:
    使得负数都靠左端,正数都靠右端,0在中部。注意问题的特点是:负数区域和正数区域内并不要求有序。可以利用这个特点通过1次线性扫描就结束战斗!!
    以下的程序实现了该目标。
    其中x指向待排序的整型数组,len是数组的长度。

    void sort3p(int* x, int len)
    {
    	int p = 0;
    	int left = 0;
    	int right = len-1;
    	
    	while(p<=right){
    		if(x[p]<0){
    			int t = x[left];
    			x[left] = x[p];
    			x[p] = t;
    			left++;
    			p++;
    		}
    		else if(x[p]>0){
    			int t = x[right];
    			x[right] = x[p];
    			x[p] = t;
    			right--;			
    		}
    		else{
    			__________________________;  //填空位置
    		}
    	}
    	
    }
    

    答案:p++

    思路:递归程序,代码填空思路:可以自己选取一段数据,模拟题目中的代码,手算一遍理清思路。

    经过分析可以知道,三部排序的思路类似于快速排序的指针划分。大于0的放在数组右端、等于0的在中间、小于0的放在左端。
    这里的p表示正在判断的元素指针所处的位置,left就是左端第1个大于0的元素的指针,right就是右端最前1个大于0的指针。

  • 相关阅读:
    金融期货期权
    悲剧论——情感净化
    麻将
    后现代postmodern
    AlphaGo
    上帝已死——尼采
    牛顿迭代法
    浏览器访问homestead,由http自动转换为https
    Laravel框架原理(一)--Laravel中常用的PHP语法
    Android面试宝典(1)----android的基础知识
  • 原文地址:https://www.cnblogs.com/fisherss/p/10326372.html
Copyright © 2011-2022 走看看