基本排序之冒泡排序

关于排序,这个是最,,,最基础的东西,但是,当我们学习排序的时候,我们似乎忘了一些问题,好像为了排序而排序,都忘记在干什么?那么有下面问题:

1.为什么要排序?难道就是简简单单从大到小?

2.排了序,又能干什么?仅仅为了比大小?我们就都排个序?

3.你是对什么元素排序?它是怎么存储的??

和了,知道,这些,你就明白,这里我是对程序设计语言中的一维数组进行的排序。

冒泡排序,大家在学排序的时候,千万注意,虽然是一种简单的排序,它的思想不变,但是具体到实现,可是千千万万,非常不同,注意那些下标是如何发生变化的

咱们直接看代码:

#include<iostream>
using namespace std;
template <class T>
void bub(T p[],int n){
	int left,right,j,i;
	T d;
	left=0;right=n-1;
	while(left<right){
	j=right-1;right=0;
	for(i=left;i<=j;i++)
		if(p[i]>p[i+1])
	{
		d=p[i];p[i]=p[i+1];p[i+1]=d;right=i;
	}
	j=left+1;left=0;
	for(i=right;i>=j;i--)
		if(p[i-1]>p[i]){
		d=p[i-1];p[i-1]=p[i];p[i]=d;left=i;
		}
	}
	return;
}
这里再随机生成50个数据进行测试,当然,你也可以直接调用rand()或者,像我这样写一个随机函数

#include"bub.h"
#include<iomanip>
int main(){
	int i,j;
	double p[50],r=1.0;
	for(i=0;i<50;i++){
	r=2053.0*r+13489.0;
	j=r/65536.0;
	r=r-j*65536.0;
	p[i]=r/65536.0;
	}
	for(i=0;i<50;i++)
		p[i]=100.0+200.0*p[i];
	cout<<"sort the data:"<<endl;
	for(i=0;i<10;i++)
	{
	for(j=0;j<5;j++)
		cout<<setw(10)<<p[5*i+j];
	cout<<endl;
	}
	bub(p+10,30);
	cout<<"after the sort:"<<endl;
	for(i=0;i<10;i++)
	{
	for(j=0;j<5;j++)
		cout<<setw(10)<<p[5*i+j];
	cout<<endl;
	}
	return 0;
}
有关这个排序,我来说一下,left和right记录每次循环停止时指针的位置,为什么?因为这个冒泡排序,它采用的是从前往后,然后从后往前,那些最大的,最小的,找到之后,就不参加比较,因此就有了上边的两个指针,左->右,然后,右->左,来来回回找,当发现前面>后面,则交换,同样是冒泡,是不是,和一般的不同呢?自己体验一下。
看看最后的结果:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值