中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
三种排序算法及三种变量交换的宏实现
作者:未知 时间:2005-07-27 23:25 出处:CSDN 责编:chinaitpower
              摘要:三种排序算法及三种变量交换的宏实现

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
请按任意键继续. . .


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有