zoukankan      html  css  js  c++  java
  • 排序算法之高速排序


    这一个博客将高速排序讲的挺好的:http://blog.csdn.net/morewindows/article/details/6684558


    一、算法思想描写叙述

    1)令i = L,j = R,将基准数挖出形成第一个坑(基准数能够选择第一个位置上的数作为基准数,也能够选择其它位置上的数作为基准数)。

    2)j--   。

    从后往前扫,找到第一个比基准数小的数。并将其“挖出”,填到上一个形成的坑中arr[i]

    3)i++ 。

    从前往后扫,找到第一个比基准数大的数。并将其“挖出”,填到上一个形成的坑中arr[j]

    4)不断地反复2)、3)直到i == j,将基准数天津最后一个坑中arr[i]


    二、算法分析



    三、算法实现

    /*
     * quicksort.cpp
     *
     *  Created on: 2014年5月18日
     *      Author: pc
     */
    
    
    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    const int maxn = 10;
    int arr[maxn];
    
    
    void quicksort(int arr[],int l,int r){
    	int i = l;
    	int j = r;
    	int x = arr[l];//将最左边的数作为基准数
    
    	if(l < r){
    		while(i < j){//假设i!=j就不断的进行循环
    
    			while(i < j && arr[j] >= x){//从后往前扫,找到第一个比基准数小的数
    				--j;
    			}
    			if(i < j){//假设找到了
    				arr[i++] = arr[j];//将坑填上,并将i的值++
    			}
    
    			while(i < j && arr[i] <= x){//从前往后扫,找到第一个比基准数大的数
    				++i;
    			}
    			if(i < j){
    				arr[j--] = arr[i];//将坑填上,并将j的值--
    			}
    		}
    		arr[i] = x;//将最后的基准位置上的坑填上
    
    		//分治策略
    		quicksort(arr,l,i-1);//递归调用
    		quicksort(arr,i+1,r);
    	}
    }
    
    
    void createReverseArr(){
    	int i = 0;
    	for(i = 0 ; i < maxn ; ++i){
    		arr[i] = maxn - i;
    	}
    }
    
    void printArr(){
    	int i;
    	for(i = 0 ; i < maxn ; ++i){
    		printf("%d " , arr[i]);
    	}
    	printf("
    ");
    }
    
    int main(){
    	createReverseArr();
    	printArr();
    	quicksort(arr,0,maxn-1);
    	printArr();
    }
    





  • 相关阅读:
    【卡西欧Fx-5800p系列教程】Pol()和Rec()正反算妙用
    《关于2013年全国测量人员最低工资标准的通知》
    易语言测量编程工具教程篇
    价值300元的《测量宝典》
    业界常用的和不常用cad快捷键
    角度格式批量转化弧度—易语言
    Web.config中 mode="RemoteOnly" 跟mode="On" 区别
    Oracle 批量修改某个用户下表的表空间
    JQuery radio单选框应用
    RadioButtonFor控件
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6794480.html
Copyright © 2011-2022 走看看