| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4129 人关注过本帖
标题:[原创]六种排序方法
只看楼主 加入收藏
slp001002
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-12-8
收藏
 问题点数:0 回复次数:29 
[原创]六种排序方法

//六种排序方法.

#include<iostream.h>

#define max 100

class sample

{

int A[max]; int n;

friend class process;

public:

sample() {n=0;}

};

class process

{ void qsort(sample &s,int l,int h); //私有成员,quicksort()成员调用

public:

void getdata(sample &s); //获取数据

void insertsort(sample &s); //插入排序

void shellsort(sample &s); //希尔排序

void bubblesort(sample &s); //冒泡排序

void quicksort(sample &s); //快速排序

void selectsort(sample &s); //选择排序

void binsertsort(sample &s); //折半排序

void disp(sample &s); //输出结果

};

void process::getdata(sample &s)

{ int i; cout<<"元素个数: "; cin>>s.n;

for(i=0;i<s.n;i++)

{ cout<<"输入第 "<<i+1<<" 个数据: "; cin>>s.A[i]; }

}

void process::insertsort(sample &s) //插入排序

{ int i,j,temp;

for(i=0;i<s.n;i++)

{ temp=s.A[i]; j=i-1;

while (temp<s.A[j])

{ s.A[j+1]=s.A[j]; j--; }

s.A[j+1]=temp;

}

}

void process::shellsort(sample &s) //希尔排序

{ int i,j,gap,temp; gap=s.n/2;

while(gap>0)

{ for(i=gap;i<s.n;i++)

{ j=i-gap;

while (j>=gap)

if(s.A[j]>s.A[j+gap])

{ temp=s.A[j]; s.A[j]=s.A[j+gap]; s.A[j+gap]=temp; j=j-gap; }

else j=0;

}

gap=gap/2;

}

}

void process::bubblesort(sample &s) //冒泡排序

{ int j,i,temp;

for(i=0;i<s.n;i++)

for(j=s.n-1;j>i+1;j--)

{ if(s.A[j]<s.A[j-1])

{ temp=s.A[j]; s.A[j]=s.A[j-1]; s.A[j-1]=temp; }

}

}

void process::quicksort(sample &s) //快速排序

{ qsort(s,0,s.n-1); }

void process::qsort(sample &s,int l,int h)

{ int i=l,j=h,temp;

if(l<h)

{ temp=s.A[l];

do

{ while (j>i&&s.A[j]>=temp) j--;

if(i<j)

{ s.A[i]=s.A[j]; i++; }

while( i<j&&s.A[i]<=temp) i++;

if(i<j)

{ s.A[j]=s.A[i]; j--; }

}while(i<j);

s.A[i]=temp; qsort(s,l,j-1); qsort(s,j+1,h);

}

}

void process::selectsort(sample &s) //选择排序

{ int i,j,k,temp;

for(i=0;i<s.n;i++)

{ k=i;

for(j=i+1;j<s.n-1;j++)

if(s.A[j]<s.A[k]) k=j;

temp=s.A[i]; s.A[i]=s.A[k]; s.A[k]=temp;

}

}

void process::binsertsort(sample &s) //
折半排序

{ int i,j,mid,high,low;

for(i=1;i<s.n;i++)

{ s.A[s.n]=s.A[i]; low=0; high=i-1;

while(low<=high)

{ mid=(low+high)/2;

if(s.A[s.n]<s.A[mid]) high=mid-1;

else low=mid+1;

}

for(j=i-1;j>=high;--j) s.A[j+1]=s.A[j];

s.A[high+1]=s.A[s.n];

}

}

void process::disp(sample &s)

{ int i; for(i=0;i<s.n;i++) cout<<s.A[i]<<" "; cout<<endl;}

void main()

{

int sel; char c; sample s; process p; p.getdata(s); cout<<"原来排序: "; p.disp(s);

do

{ cout<<"0: 插入排序 1:希尔排序 2:冒泡排序 3:快速排序 4:选择排序

5:折半排序 其他退出"<<endl;

cout<<"选择排序结果: "; cin>>sel;

switch(sel) {

case 0:
p.insertsort(s); cout<<"插入排序结果: "; p.disp(s);

cout<<"(y/Y)否继续: "; cin>>c; break;

case 1: p.shellsort(s); cout<<"希尔排序结果: "; p.disp(s);

cout<<"(y/Y)否继续: "; cin>>c; break;

case 2: p.bubblesort(s); cout<<"冒泡排序结果: "; p.disp(s);

cout<<"(y/Y)否继续: "; cin>>c; break;

case 3: p.quicksort(s); cout<<"快速排序结果: "; p.disp(s);

cout<<"(y/Y)否继续: "; cin>>c; break;

case 4: p.selectsort(s); cout<<"选择排序结果: "; p.disp(s);

cout<<"(y/Y)否继续: "; cin>>c; break;

case 5: p. binsertsort (s); cout<<"折半排序结果: "; p.disp(s);

cout<<"(y/Y)否继续: "; cin>>c; break;

default:
c='n'; break;

}

if(c!='y'&&c!='Y') cout<<"退出排序!"<<endl;

}while(c=='y'||c=='Y');


}

搜索更多相关主题的帖子: class include process friend 
2005-12-08 13:14
jeffbeckroll
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-2-25
收藏
得分:0 

好人啊 !!!!!!!!!!!!!!!!

2006-04-25 15:22
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
感谢楼主。。。。。。。二楼的朋友行

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2006-04-29 11:29
carollvy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-6-4
收藏
得分:0 

非常感谢楼主


2006-06-04 16:21
霞飞
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-6-3
收藏
得分:0 
支持支持支持支持支持支持支持支持支持支持支持支持支持支持支持支持支持支
持支持支持支持支持支持支持支持支持支持支持支持支持支持支持支持支持支
支持支持支持支持支持支持支持无██████████████████支持
支持支持支持支持支持无████████████████支持支持支持支持
支持支持支持支持███████无███支持█████支持
支持无████████████支持支持支持████支持支持支持支持支持
无██████████████支持支持支持████支持支持支持支持支持
无████████████支持支持支持无███████████
支持支持
无████████████支持支持支持██████████████支持
支持██████████支持支持无██████支持无███████支持
支持支持支持支持████支持支持无████支持支持支持█████支持支
支持支持支持支持████支持支持████支持██支持无█████支持支
支持支持支持支持████支持支持████支持████无█████支持支
支持支持支持支持████支持支持████支持████无█████支持支
支持支持支持支持████支持支持████支持███支持█████支持支
支持支持支持支持████支持支持████支持███支持█████支持支
支持支持支持支持████支持支持████无████支持█████支持支
支持支持支持支持████支持支持████无████支持█████支持支
支持支持支持支持████支持支持████无████支持█████支持支
支持支持支持支持████支持支持████无████支持█████支持支
支持支持支持支持████支持支持███支持████支持█████支持支
支持██支持无█████支持支持███支持███支持无█████支持支
支持██████████支持支持无██支持██支持支持█████支持支
支持无█████████支持支持支持支持███支持支持无████支持支
支持支持无███████支持支持支持支持███无████支持支持支持支
支持支持支持██████支持支持支持无████支持█████支支持支持
支持支持支持支持支持支持支持支持支持支持支持支持支持支持支持支持支持支
支持支持支持支持支持支持支持
2006-06-04 17:32
ainidsf
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-3-27
收藏
得分:0 

呵呵,很好!

2006-06-12 18:00
编客关关
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-3-28
收藏
得分:0 

好!!!!!!!!!!!!!!!!!!!!!!11

2006-06-13 11:33
zhourunfa66
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-5-17
收藏
得分:0 

确实不错
我今天刚讲
还没学会

2006-06-16 13:38
a7471717
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-6-15
收藏
得分:0 

楼主 太经典了 狂支持


2006-06-18 22:29
huangtaomvp
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-4-23
收藏
得分:0 


2006-06-20 17:32
快速回复:[原创]六种排序方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019499 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved