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

原创 2005年05月05日 21:33:00

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

C++实现三种重要排序算法

  • 2013年05月23日 22:57
  • 56KB
  • 下载

三种java写的排序算法

  • 2013年07月12日 11:21
  • 7KB
  • 下载

三种线性时间O(n)排序算法 - 计数-基数-桶 - C++实现

引言 注:由于没有启用任何公式编辑器,为表示方便:以下涉及时间复杂度表示时,其渐近符号用以下符号代替: 先来看一个定理:任意一个比较排序算法在最坏情况下,都需要做 $(nlgn)次的比较。其可...
  • heyabo
  • heyabo
  • 2013年05月13日 03:38
  • 2678

C语言《常见的三种排序算法》

  • 2011年05月18日 17:29
  • 29KB
  • 下载

三种基于比较的nlgn排序算法 - 归并-堆-快排 - C++实现

引言 注:由于没有启用任何公示编辑器,为表示方便:以下涉及时间复杂度表示时,其渐近符号用以下符号代替: 本文将介绍三种能在O(nlgn)时间内排序n个数的算法:归并排序、堆排序和快速排序。它们...
  • heyabo
  • heyabo
  • 2013年05月13日 19:43
  • 7522

Java实现三种排序算法

学习Java有一段时间了,今天研究了一下简单的算法,算法确实非常难,yonglebantiandeshijiancaino...

三种初级排序算法(冒泡、选择、直接插入)java实现及其性能比较

排序就是将一组对象按照某种逻辑顺序重新排列的过程。排序在很多地方可以用到,比如在淘宝购物时,完全可以根据自己的需要对搜索到的商品进行排序。在计算时代早期,大家普遍认为30%的计算周期都用在了排序上,但...

三种简单的排序算法(java实现)

排序算法在学习语言之初都会提到,今天就来介绍三种简单的排序算法,分别是插入排序、冒泡排序和选择排序。我前面还写过一个关于快速排序的,有兴趣的可以去看看:http://blog.csdn.net/luq...
  • luqiren
  • luqiren
  • 2017年10月20日 11:49
  • 45

三种线性排序算法(计数、基数、桶排序)的简单实现

计数排序 计数排序假设n个输入元素中的每一个都是介于0到k之间的整数。此处k为某个整数(输入数据在一个小范围内)。 算法思想 计数排序的基本思想是对每一个输入元素x,确定出小于x的元素的个数。然后再...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:三种排序算法及三种变量交换的宏实现
举报原因:
原因补充:

(最多只允许输入30个字)