职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1782|回复: 1

C语言中排序程序代码参考

[复制链接]
zlyuanna 发表于 2007-3-6 16:51 | 显示全部楼层 |阅读模式
这是冒泡法的程序:
#include<stdio.h>
void sort(int array[],int size)
{
int i,j,temp;
/*下面是利用相邻的比较,把大的数放到上面;*/
for(i=0;i<size-1;i++)
        for(j=i+1;j<size;j++)
               if(array>array[j])
               {
                      temp=array;
                      array=array[j];
                      array[j]=temp;
               }
}
void main()
{
int i;
int a[10]={1,33,78,34,787,213,132,35,32,21};
sort(a,10);
for(i=0;i<10;i++)
        printf(\"%6d\",a);
}
这是选择法的程序:
#include<stdio.h>
void sort(int array[],int size)
{
int i,j,k,temp;
for(i=0;i<size-1;i++)
{
        k=i;
/*把最小的那一个数找出来,并且用a[k]记下来,然后与a交换;*/
        for(j=i+1;j<size;j++)
               if(array[k]>array[j])
                      k=j;
        temp=array[k];
        array[k]=array;
        array=temp;
}
}
void main()
{
int a[]={12,43,54,23,32,65,87,2,34,54};
int i;
sort(a,10);
for(i=0;i<10;i++)
        printf(\"%d\\t\",a);
}
这是一个快速排序的程序:
#include<stdio.h>
void quick_sort(int array[],int first,int last)//first,last分别为数组下标的范围;
{
int temp,low,high,list_separator;
low=first;
high=last;
/*下面是比较数组中的大小,把数组中的数与中间数比较,大的放在后半部分,比中间数小的放在前半部分,*/
    list_separator=array[(first+last)/2];//中间数;
do{
        while(array[low]<list_separator)//中间数与前半部分比较;
               low++;
        while(array[high]>list_separator)// 中间数与后半部分比较;
               high--;
        if(low<=high)//前半部分与后半部分交换;
        {
               temp=array[low];
               array[low++]=array[high];
               array[high--]=temp;
        }
}while(low<=high);
if(first<high)
        quick_sort(array,first,high);//利用递归的办法,实行循环;
if(low<last)
        quick_sort(array,low,last);//利用递归的办法,实行循环;
}

void main()
{
int a[9]={12,23,34,65,93,32,21,9,8};
quick_sort(a,0,8);
for(int i=0;i<9;i++)
        printf(\"%d\\t\",a);
printf(\"\\n\");
}
这是一个希尔排序的程序:
#include<stdio.h>
void shell_sort(int array[],int size)
{
int temp,gap,i,flag;
gap=size/2;
do{
        do{
               flag=0;/*利用标记,使前半部分与后半部分的数都对应比较过,前半部分大于后半部分的交换,直到都比较过,并且前半部分的数小于与前部分一一对应的后部分的数时,退出while循环*/
               for(i=0;i<size-gap;i++)
                      if(array>array[i+gap])
                      {
                             temp=array;
                             array=array[i+gap];
                             array[i+gap]=temp;
                          flag=1;
                      }
        }while(flag);
}while(gap=gap/2);
}
void main()
{
int array[]={1,2,32,43,64,7654,321,42,23,97,56,32,78,45,32},i;
shell_sort(array,15);
for(i=0;i<15;i++)
        printf(\"%10d\",array);
}
dab 发表于 2009-8-31 13:58 | 显示全部楼层
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-24 22:23 , Processed in 0.136828 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表