| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4024 人关注过本帖
标题:数组排序 (冒泡法)
只看楼主 加入收藏
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
结帖率:100%
收藏
 问题点数:0 回复次数:11 
数组排序 (冒泡法)

/*
Name: 数组排序 (冒泡法)
Copyright:
Author:
Date: 14-10-07 15:04
Description:
*/
#include <iostream>
#include <vector>
#include <cstddef> //size_t
using namespace std;

class order
{
public:
void actSmallToBig(int int_arr[],const size_t arr_sz)
{
pa=int_arr;
sz=arr_sz;
for(size_t ix=0; ix!=arr_sz; ++ix)
for(size_t _ix=ix; _ix!=arr_sz; ++_ix)
if(int_arr[ix]>=int_arr[_ix]) //交换过程
{
temp=int_arr[ix];
int_arr[ix]=int_arr[_ix];
int_arr[_ix]=temp;
}
}
void actBigToSmall(int int_arr[],const size_t arr_sz)
{
pa=int_arr;
sz=arr_sz;
for(size_t ix=0; ix!=arr_sz; ++ix)
for(size_t _ix=ix; _ix!=arr_sz; ++_ix)
if(int_arr[ix]<=int_arr[_ix]) //和actSmallToBig不同是“<=“
{
temp=int_arr[ix];
int_arr[ix]=int_arr[_ix];
int_arr[_ix]=temp;
}
}
void show()
{
for(int *pbegin=pa,*pend=pa+sz; pbegin!=pend; ++pbegin)
{
cout<<*pbegin<<' ';
cout.flush();
}
}
order():temp(0) {}
private:
int *pa;
int temp;
size_t sz;
};

int main()
{
const size_t arrSize=10;
int arr[arrSize];
for(int *pbegin=arr,*pend=arr+arrSize; pbegin!=pend; ++pbegin)
{
int val;
cin>>val;
*pbegin=val;
}
order px;
px.actSmallToBig(arr,arrSize);
cout<<"从小到大排序后:"<<endl;
px.show();
cout<<endl;
px.actBigToSmall(arr,arrSize);
cout<<"从大到小排序后:"<<endl;
px.show();
cout<<endl;
system("pause");
return 0;
}
今天看到有人问怎么实现对任意多个数进行排序,这个只要把数组改成vector向量就行了.算法是一样的

搜索更多相关主题的帖子: 冒泡 include int arr vector 
2007-10-24 23:36
joker39
Rank: 1
等 级:新手上路
威 望:1
帖 子:78
专家分:0
注 册:2007-9-6
收藏
得分:0 
这是c++啊  有没有c的  这个要输入非数字的才能结束啊
2007-10-25 12:05
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
不用啊,你输入完了十个数就自动结束了。
心细的就可以看出来了。

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2007-10-26 16:36
yyce
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-9-19
收藏
得分:0 
#include<stdio.h>
void main()
{
int a[10];
int i,j,t;
for(i=0;i<10;i++)
scanf("%d",a[i]);
ptintf("\n");
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=a[j];
}
printf("the sorted number :\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
2007-11-05 23:16
ldywzy
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-8-12
收藏
得分:0 
不是很懂呀
2007-11-08 11:56
孤魂居士
Rank: 2
来 自:老A(中国地大)
等 级:论坛游民
威 望:4
帖 子:1142
专家分:18
注 册:2007-5-21
收藏
得分:0 
LZ的冒泡怎么搞这么复杂```

准备用3年做个高级软件工程师 10年也做不成。准备用10年做成高级软件工程师 3年就成了QQ 群 45771086
欢迎版主...欢迎JAVA爱好者...
一起从深夜 到凌晨...
2007-11-08 12:04
jxj777
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2007-10-27
收藏
得分:0 

加个标志,检验一次大循环后是否有交换,如没有,则可直接结束了,可提高效率


一个人的力量是缈小的....... 互帮互助才是出路
2007-11-08 19:58
hago
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-11-3
收藏
得分:0 
#include<stdio.h>
int maoposort(int a[],int n) /*n是数组中数的个数*/
{
int i,j,k;
for(i=n-1;i>=0;i--)
{
for(j=0;j<=i-1;j++)
{
if (a[j]>a[j+1])
{k=a[j+1];a[j+1]=a[j];a[j]=k;}
}
}
return a[i];
}
int main(void)
{
int m,n;
int a[10]={0,45,3,76,5,4,6,12,42,98};
maoposort(a,10);
for(m=0;m<=9;m++)
printf("%-2d ",a[m]);
return 0;
}
用c语言编的冒泡法

[此贴子已经被作者于2007-11-8 20:25:49编辑过]

2007-11-08 20:22
hustmumu
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-11-8
收藏
得分:0 
冒泡法效率比较低,标记法会好些。
2007-11-09 10:07
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 

冒泡应该没有LZ的那么复杂吧```


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-11-09 10:10
快速回复:数组排序 (冒泡法)
数据加载中...
 
   



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

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