求各种排序算法(c语言描述)
100 问题点数:100、回复次数:7Top
1 楼iProgram(na)回复于 2002-02-15 13:06:23 得分 0
我列几个名字,你去搜搜哈:
快速排序
“冒泡法”排序
双排序
堆排序
希尔排序
选择排序(堆排序好想就是一种选择排序)
归并排序
基数排序Top
2 楼liu_feng_fly(笑看风云 搏击苍穹 衔日月)回复于 2002-02-15 13:48:51 得分 0
qsort,c运行库就有的快速排序函数Top
3 楼wyarrant(ostrich)回复于 2002-02-15 13:49:24 得分 0
数据结构基本课程?Top
4 楼freeleo(粑粑)回复于 2002-02-15 14:44:58 得分 100
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM 30
init(item,count)
int item[];
int count;{
void print();
int i;
randomize();
for(i=0;i<count;i++)
item[i]=(int)rand();
print(item,count);
}
main(){
void bubble();
void shaker();
void select();
void insert();
void shell();
void quicksort();
void print();
int a[NUM];
int i,j;
int choice=0;
clrscr();
printf("\t-----Compare the sort method-----\n");
printf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
"Enter your choice:",
"1,Bubble sort;",
"2,Shaker sort;",
"3,Select sort;",
"4,Insert sort;",
"5,Shell sort;",
"6,Quicksort sort;",
"7,Quit." );
while(choice!=7){
printf("?");
scanf("%d",&choice);
switch(choice){
case 1:
init(a,NUM);
bubble(a,NUM);
print(a,NUM);
break;
case 2:
init(a,NUM);
shaker(a,NUM);
print(a,NUM);
break;
case 3:
init(a,NUM);
select(a,NUM);
print(a,NUM);
break;
case 4:
init(a,NUM);
insert(a,NUM);
print(a,NUM);
break;
case 5:
init(a,NUM);
shell(a,NUM);
print(a,NUM);
break;
case 6:
init(a,NUM);
quicksort(a,NUM);
print(a,NUM);
break;
}
}
printf("End of run!\n");
}
/*void print(){}*/
void print(item,count)
int item[];
int count;{
int i;
for(i=0;i<count;i++){
printf("%d",item[i]);
if((i+1)%3==0)
printf("\n");
else
printf("\t");
}
printf("\n");
}
void bubble(item,count)
int *item;
int count;
{
register int a,b;
register int t;
for(a=1;a<count;++a)
for(b=count-1;b>=a;--b){
if(item[b-1]>item[b]){
t=item[b-1];
item[b-1]=item[b];
item[b]=t;
}
}
}
void shaker(item,count)
int *item;
int count;{
int a,b,c,d;
int t;
c=1;
b=count-1;d=count-1;
do{
for(a=d;a>=c;--a){
if(item[a-1]>item[a]){
t=item[a-1];
item[a-1]=item[a];
item[a]=t;
b=a;
}
}
c=b+1;
for(a=c;a<d+1;++a){
if(item[a-1]>item[a]){
t=item[a-1];
item[a-1]=item[a];
item[a]=t;
b=a;
}
}
d=b-1;
}while(c<=d);
}
void select(item,count)
int *item;
int count;{
register int a,b,c;
int t;
for(a=0;a<count-1;++a){
c=a;
t=item[a];
for(b=a+1;b<count;++b){
if(item[b]<t){
c=b;
t=item[b];
}
}
item[c]=item[a];
item[a]=t;
}
}
void insert(item,count)
int *item;
int count;{
register int a,b;
int t;
for(a=1;a<count;++a){
t=item[a];
b=a-1;
while(b>=0&&t<item[b]){
item[b+1]=item[b];
b--;
}
item[b+1]=t;
}
}
void shell(item,count)
int *item;
int count;{
register int i,j,k,s,w;
int x,a[5]={9,5,3,2,1};
for(w=0;w<5;w++){
k=a[w];s=-k;
for(i=k;i<count;++i){
x=item[i];
j=i-k;
if(s==0){
s++;
item[s]=x;
}
while(x<item[j]&&j>=0&&j<=count){
item[j+k]=item[j];
j-=k;
}
item[j+k]=x;
}
}
}
void quicksort(item,count)
int *item;
int count;{
qs(item,0,count-1);
}
qs(item,left,right)
int *item;
int left,right;{
register int i,j;
int x,y;
i=left;j=right;
x=item[(left+right)/2];
do{
while(item[i]<x&&i<right) i++;
while(x<item[j]&&j>left) j--;
if(i<=j){
y=item[i];
item[i]=item[j];
item[j]=y;
i++;j--;
}
}while(i<=j);
if(left<j) qs(item,left,j);
if(i<right) qs(item,i,right);
}Top
5 楼freeleo(粑粑)回复于 2002-02-15 14:47:02 得分 0
我原来学的时候,想试试几种排序的差别才写的。呵呵,挺有意思的Top
6 楼NowCan(城市浪人)回复于 2002-02-15 16:31:01 得分 0
多看书,自己写。像你这样,再编20年也赶不上盖子。Top
7 楼hawkgao(红旗)回复于 2002-02-15 17:36:22 得分 0
《C算法程序集》请话的,全部解决问题Top




