天之道

享受编程的乐趣。
posts - 118, comments - 7, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

快速排序

Posted on 2012-03-04 17:14 hoshelly 阅读(140) 评论(0)  编辑 收藏 引用 所属分类: DS && Algorithm
#include<stdio.h>
void swap(int *a,int *b)
{
    
int tmp;
    tmp
=*a;
    
*a=*b;
    
*b=tmp;
}

void quicksort(int k[],int s,int t)
{
    
int i,j;
    
if(s<t)
    {
        i
=s;
        j
=t+1;
        
while(1)
        {
            
do i++;
            
while(!(k[s]>=k[i] || i==t));//重复执行i++操作
            do j--;
            
while(!(k[s]<=k[j] || j==s));//重复执行j--操作

            
if(i<j)
                swap(
&k[i],&k[j]); //交换k[i]和k[j]的位置
            else
                
break;
        }
        swap(
&k[s],&k[j]);   //交换基准元素与k[j]的位置
        quicksort(k,s,j-1);  //递归排序基准元素前面的子序列
        quicksort(k,j+1,t);  //递归排序基准元素后面的子序列
    }
}

int main()
{
    
int k[10]={2,5,6,3,7,8,0,9,12,1},i;
    printf(
"The orginal data array is\n");
    
for(i=0;i<10;i++)
        printf(
"%d ",k[i]);
    quicksort(k,
0,9);  //从大到小排序
    printf("\nThe result of quick sorting for the array is\n");
    
for(i=0;i<10;i++)
        printf(
"%d ",k[i]);
    
return 0;
}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理