暴走的指压师

为何中年妇女对14岁正太不理不睬?28岁大妈是如何保持14岁身材与脸颊?三无蓝毛究竟身在何处?为何少年抛弃妹子去寻找基友的菊花,大妈抛弃正太去和眼镜妹百合? 一切的一切,请看《Q ヱヴァンゲリヲン新劇場版:Q 》
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

快排

Posted on 2011-09-22 14:13  晓彻  阅读(416)  评论(0编辑  收藏  举报
#include <stdio.h>
#include <stdlib.h>

#define random(x) (rand()%x)

/*
* xiaoyang 2011-9-22
* sort algrithms
*/
void config(int* data, int len)
{
int i = 0;
srand((int)time(0));

for(i = 0; i < len; i++){
data[i] = random(2000);
}
}

void print(int* data,int len)
{
int i = 0;
printf("---------------\n");
for(i = 0; i < len; i++){
printf("%d ",data[i]);
if(i%20 == 19){
printf("\n");
}
}
}

void swapx(int *data, int x, int y)
{
int tmp = data[x];
data[x] = data[y];
data[y] = tmp;
}

/*
* quick sort, partition
*/
int quick_sort_parti(int* data,int begin,int end)
{
int x = data[begin];
int lbegin = begin+1;
int pos = begin;
int tmp = 0;

if(begin+1 >= end)
return 0;

/*保证判断元素的变化*/
swapx(data,begin,end-1);
x = data[begin];

for(pos=begin+1; pos < end; pos++){
if(data[pos] <= x){
swapx(data,lbegin,pos);
lbegin++;
}else{

}
}

/*保证切分的两部分都有元素*/
if( (lbegin-begin) >= 1 ){
swapx(data,begin,lbegin-1);
}

lbegin--;
return lbegin;
}

void quick_sort(int* data,int begin,int end)
{
int mid;

if(begin+1 >= end)
return ;

mid = quick_sort_parti(data,begin,end);
//printf("\n[%d,%d],mid=%d\n",begin,end,mid);
//print(data,end-begin);

quick_sort(data,begin,mid);
//printf("\n[%d,%d]\n",begin,mid-1);
//print(data,mid-1-begin);

quick_sort(data,mid,end);
//printf("\n[%d,%d]\n",mid,end);
//print(data,end-mid);
}

/*
* main
*/
int main()
{
const int count = 100;
int data[count];
config(data,count);
print(data,count);

printf("\nbegin\n---------------\n");
quick_sort(data,0,count);
printf("\nend\n---------------\n");
print(data,count);

return 0;
}