<排序>放分100!!人人有份!!

oliver88888888 2004-07-07 07:43:39
1.给出各排序的代码(从C语言和数据结构两方面入手)
2.比较各排序的时间复杂度,优劣性能等

<排序>

a插入排序:
直接插入排序
希尔排序

b交换排序:
起泡排序
快速排序

c选择排序:
...全文
193 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
weekly123 2004-07-08
  • 打赏
  • 举报
回复
up
snowegale888 2004-07-08
  • 打赏
  • 举报
回复
up
sanyou98 2004-07-08
  • 打赏
  • 举报
回复
up
lyz0418 2004-07-08
  • 打赏
  • 举报
回复
//数据以从小到大顺序排列

#include<iostream.h>
#include<stdlib.h>
#include<malloc.h>

typedef int KeyType;
#define MAXSIZE 100
#define MAXNUM 12
#define OK 1

struct RedType{
KeyType key;
//int otherinfo;
};

struct SqList{
RedType r[MAXSIZE+1];
int length;
};

//定义结构体
void Enter_List(SqList &L){
int test,i=1,n;
cout<<"输入数据元素的个数(n):"<<endl;
cin>>n;
cout<<"输入数据元素(data):"<<endl;
while(n){
cin>>test;
L.r[i].key=test;
i++;
L.length++;
n--;
}
}
//输入未排序序列

KeyType LT(KeyType s1,KeyType s2){
if(s1>=s2)
return 0;
else
return 1;
}
//比较s1、s2大小

void Print(SqList L){
cout<<"排好序的序列为:"<<endl;
int n=L.length;
for(int i=1;i<=n;i++)
cout<<L.r[i].key<<'\t';
cout<<endl<<endl;
}
//输出排好序的序列(通过检查序列是否为升序判断程序运行成功与否)

void Print_time(int time){
cout<<"程序的时间复杂度为:\t"<<time<<endl<<endl;
}
//各种排序方法:
KeyType BallSort(SqList &L){
int text=0,time=0,t=0;
for(int i=2;i<=L.length;i++){
text=i-1;
for(int j=i;j<=L.length;j++)
if(L.r[text].key>L.r[j].key){
text=j;
t=1;
time+=2;
}
if(t==1){
int t=0;
t=L.r[i-1].key;
L.r[i-1].key=L.r[text].key;
L.r[text].key=t;
time+=3;
}
}
return time;
}

//起泡排序
/*
KeyType InsertSort(SqList &L){
int time=0;
for(int i=2;i<=L.length;i++)
if(LT(L.r[i].key,L.r[i-1].key)){
L.r[0]=L.r[i];
L.r[i]=L.r[i-1];
for(int j=i-2;LT(L.r[0].key,L.r[j].key);--j){
L.r[j+1]=L.r[j];
time++;
}
L.r[j+1]=L.r[0];
time+=3;
}
return time;
}
//插入排序

KeyType BInsertSort(SqList &L){
int time=0;
for(int i=2;i<=L.length;i++){
L.r[0]=L.r[i];
int low,high;
low=1;
high=i-1;
while(low<=high){
int m=(low+high)/2;
if(LT(L.r[0].key,L.r[m].key))
high=m-1;
else
low=m+1;
time++;
}
for(int j=i-1;j>=high+1;--j){
L.r[j+1]=L.r[j];
time++;
}
L.r[high+1]=L.r[0];
}
return time;
}
//折半插入排序

KeyType ShellInsert(SqList &L,int dk){
int time=0;
for(int i=dk+1;i<=L.length;++i)
if(LT(L.r[i].key,L.r[i-dk].key)){
L.r[0]=L.r[i];
for(int j=i-dk;j>0&<(L.r[0].key,L.r[j].key);j-=dk){
L.r[j+dk]=L.r[j];
time++;
}
L.r[j+dk]=L.r[0];
}
return time;
}

KeyType ShellSort(SqList &L,int dlta[],int t){
int time=0;
for(int k=0;k<t;k++)
time+=ShellInsert(L,dlta[k]);
return time;
}

//希尔排序

KeyType Partition(SqList &L,int low,int high,int &time){
RedType s;
int pivotkey;
pivotkey=L.r[low].key;
while(low<high){
while(low<high&&L.r[high].key>=pivotkey){
--high;
time++;
}
s=L.r[low];
L.r[low]=L.r[high];
L.r[high]=s;
while(low<high&&L.r[low].key<=pivotkey){
++low;
time++;
}
s=L.r[low];
L.r[low]=L.r[high];
L.r[high]=s;
time+=6;
}
return low;
}

int time=0;
KeyType Qsort(SqList &L,int low,int high){
int pivotkey;
if(low<high){
pivotkey=Partition(L,low,high,time);
Qsort(L,low,pivotkey-1);
Qsort(L,pivotkey+1,high);
}
return time;
}

KeyType QuickSort(SqList &L){
int time=0;
time=Qsort(L,1,L.length);
return time;
}
//快速排序

KeyType SelectMinKey(SqList &L,int i,int &time){
int s,t;
s=L.r[i].key;
t=i;
for(int j=i+1;j<=L.length;j++)
if(s>L.r[j].key){
s=L.r[j].key;
t=j;
time+=2;
}
return t;
}
KeyType SelectSort(SqList &L){
int j,time=0;
RedType s;
for(int i=1;i<L.length;++i){
j=SelectMinKey(L,i,time);
if(i!=j){
s=L.r[i];
L.r[i]=L.r[j];
L.r[j]=s;
time+=3;
}
}
return time;
}
//简单选择排序

KeyType HeapAdjust(SqList &H,int s,int m,int &time){
RedType rc;
rc=H.r[s];
for(int j=2*s;j<=m;j*=2){
if(j<m&<(H.r[j].key,H.r[j+1].key))
++j;
if(!LT(rc.key,H.r[j].key))
break;
H.r[s]=H.r[j];
s=j;
time+=4;
}
H.r[s]=rc;
return OK;
}

KeyType HeapSort(SqList &H){
int time=0;
for(int i=H.length/2;i>0;--i)
HeapAdjust(H,i,H.length,time);
for(i=H.length;i>1;--i){
RedType rc;
rc=H.r[1];
H.r[1]=H.r[i];
H.r[i]=rc;
time+=3;
HeapAdjust(H,1,i-1,time);
}
return time;
}*/
//堆排序
void main(){
SqList L;
int time=0;
L.length=0;
Enter_List(L);
//time=InsertSort(L);
//插入排序

//time=BInsertSort(L);
//折半插入排序

/*int *dlta,n;
cout<<"输入增量序列数:"<<endl;
cin>>n;
dlta=(int *)malloc(n*sizeof(int));
cout<<"输入增量序列:"<<endl;
for(int i=0;i<n;i++)
cin>>dlta[i];
time=ShellSort(L,dlta,n);*/
//希尔排序

//time=QuickSort(L);
//快速排序

//time=SelectSort(L);
//简单选择排序

//time=HeapSort(L);
//堆排序

time=BallSort(L);
//其泡排序
Print(L);
Print_time(time);
}






821343 2004-07-08
  • 打赏
  • 举报
回复
书上都有呀,兄弟
cyy219 2004-07-08
  • 打赏
  • 举报
回复
倒分是什么意思?还有人闲分太多的呀?
goodname 2004-07-08
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/TopicView.asp?id=3149778
http://community.csdn.net/Expert/TopicView.asp?id=3153301


老大,倒分也过于明显了吧?
bujifeng 2004-07-08
  • 打赏
  • 举报
回复
接分先!!!
407 2004-07-08
  • 打赏
  • 举报
回复
海上的云 2004-07-08
  • 打赏
  • 举报
回复
呵呵
顶吧
cnxiaohai 2004-07-07
  • 打赏
  • 举报
回复
是不是课程设计啊????

如果是课程设计

我可以教你

就是给你代码也没什么

如果是倒分

我可要举报“人渣”老大呢~~~~~~~~~~~~~~~~~~~~~~
antijpn 2004-07-07
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3114/3114475.xml?temp=.3919031
antijpn 2004-07-07
  • 打赏
  • 举报
回复
估计是倒分,此人已经有这样的记录了
dahan2005 2004-07-07
  • 打赏
  • 举报
回复
基本的东西也不自己写?
twfx7758 2004-07-07
  • 打赏
  • 举报
回复
等我在书上找到了告诉你啊!~~~~~~~~~~
an9ryfr09 2004-07-07
  • 打赏
  • 举报
回复
我就给你冒泡排序吧,(降序):

int a[10]={2,1,3,5,4,6,9,10,7,8};
int temp;
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<9;j++)
{
if(a[j]<a[i])
{temp = a[j];a[j] = a[i];a[i] = temp;}
}
}

for(i=0;i<10;i++)
printf("%d\n",a[i]);


楼下的继续吧...

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧