三种排序算法及三种变量交换的宏实现

王朝other·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

1、快速排序

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define N 100

#define SWAP(x,y)

{

int t;t=(x);(x)=(y);(y)=t;

}

int partition(int a[],int l,int r);

void quick_sort(int a[],int l,int r);

int main(int argc,char *argv[])

{

int a[N],n,i;

memset(a,0,sizeof(a));

printf("Enter how many numbers \n");

scanf("%d",&n);

for(i=0;i<n;i++)

scanf("%d",a+i);

printf("before sorted:\n");

for(i=0;i<n;i++)

printf("%d\t",a[i]);

printf("\n");

quick_sort(a,0,n-1);

printf("after sorted:\n");

for(i=0;i<n;i++)

printf("%d\t",a[i]);

printf("\n");

system("pause");

return 0;

}

void quick_sort(int a[],int l,int r)

{

int i;

if(r<=l)return;

i=partition(a,l,r);

quick_sort(a,l,i-1);

quick_sort(a,i+1,r);

return ;

}

int partition(int a[],int l,int r)

{

int i,j,v;

i=l-1;

j=r;

v=a[r];

for(;;)

{

while(a[++i]<v);

while(v<a[--j])if(j==l)

break;

if(j<=i)

break;

SWAP(a[i],a[j]);

}

SWAP(a[i],a[r]);

return i;

}

2、冒泡排序

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define N 100

#define SWAP(a, b) {(a) ^= (b); (b) ^= (a); (a) ^= (b);}

int main()

{

int num,a[N],i,j;

memset(a,0,sizeof(a));

printf("Enter how many elements in the array?\n");

scanf("%d",&num);

for(i=0;i<num;i++)

scanf("%d",a+i);

printf("before sorted:\n");

for(i=0;i<num;i++)

printf("%d\t",a[i]);

printf("\n");

for(i=num-1;i>0;i--)

for(j=0;j<i;j++)

{

if(a[j]>a[j+1])

SWAP(a[j],a[j+1]);

}

printf("after sorted:\n");

for(i=0;i<num;i++)

printf("%d\t",a[i]);

printf("\n");

system("pause");

return 0;

}

3、选择排序

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define N 100

#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))

int a[N],n=0;

void sort_a();

void p_a();

int main()

{

int i=0;

memset(a,0,sizeof(a));

printf("How many int numbers?\n");

scanf("%d",&n);

if(n<1 || n>N)

{

printf("can't accept\n");

return 1;

}

else

{

for(i=0;i<n;i++)

scanf("%d",a+i);

}

printf("before sorted:\n");

p_a();

sort_a();

printf("after sorted\n");

p_a();

system("pause");

return 0;

}

void p_a()

{

int i=0;

for(i=0;i<n-1;i++)

printf("%d\t",a[i]);

printf("%d\n",a[i]);

}

void sort_a()

{

int i,j,min,temp;

for(i=0;i<n-1;i++)

{

min=i;

for(j=i;j<n;j++)

{

if(a[j]<a[min])

min=j;

}

if(min!=i)

SWAP(a[min],a[i],temp);

}

}

--------------------------------------------

简单测试结果:

How many int numbers?

6

13 7 19 5 29 31

before sorted:

13 7 19 5 29 31

after sorted

5 7 13 19 29 31

请按任意键继续. . .

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航