zoukankan      html  css  js  c++  java
  • 【分治的典型应用:快速排序】

    分析

    数组排序任务可以如下完成:
    1.设k=a[0],将k挪到适当位置,使得比k小的元素都在k左边,比k大的元素都在k右边,和k相等的,不关心在k的左右出现均可(O(n)时间完成)
    2.把k左边的部分快速排序
    3.把k右边的部分快速排序

    代码

    #include <iostream>
    using namespace std;
    void swap(int & a,int & b)
    {//交换变量a,b值
    	int tmp=a;
    	a=b;
    	b=tmp;
    }
    void QuickSort(int a[],int s,int e)
    {
    	if(s>=e)
    	{
    		return ;
    	}
    	int k=a[s];
    	int i=s,j=e;
    	while(i!=j)
    	{
    		while(j>i&&a[j]>=k)
    		{
    			--j;
    		}
    		swap(a[i],a[j]);
    		while(i<j&&a[i]<=k)
    		{
    			++i;
    		}
    		swap(a[i],a[j]);
    	}//处理完后,a[i]=k
    	QuickSort(a,s,i-1);
    	QuickSort(a,i+1,e);
    }
    int a[]={93,27,30,2,8,12,2,8,30,89};
    int main ()
    {
    	int size=sizeof(a)/sizeof(int);
    	QuickSort(a,0,size-1);
    	for(int i=0;i<size;++i)
    	{
    		cout<<a[i]<<",";
    	}
    	cout<<endl;
    	return 0;
    }
    
  • 相关阅读:
    Nginx反向代理与负载均衡应用实践(一)
    Nginx基础详细讲解
    RabbitMQ
    GlusterFS
    AWK的使用
    Grep的过滤使用
    Sed的查,删,增,改
    jumpserver
    FTP
    hdu 3689 Infinite monkey theorem
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12339460.html
Copyright © 2011-2022 走看看