您的位置:首页 > 其它

八大排序学习之一冒泡排序

2016-10-27 15:43 176 查看
读的书越多,感慨就越多。与其得过且过,不如现在开始努力。

一直对算法不太感冒,自从实习后认识了很多通过算法进了大公司的大四毕业生,心里甚不是滋味。

好了牢骚发完,开始写冒泡算法。

冒泡算法是我在学校学到的第一个算法,很简单,但是时间复杂度是O(n^2),太高了,因为需要两次循环。

思路呢,就是经过两次遍历,每次取一个最大或者最小的出来。

按照循序一个个的检查,假如前面的比后面的大,就把前面的放到后面。

二话不说,直接贴上交换两个值代码:

void Myswap(int &x,int &y)
{
int temp=0;
temp=x;
x=y;
y=temp;
}
关键代码:

void Mysort(int a[],int n)
{
int c=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(a[j]>a[j+1])
Myswap(a[j],a[j+1]);  //交换大小
}
}


下面的是完整代码:

#include "stdafx.h"
#include <time.h>
#include <stdlib.h>
#define NUM_LEN 20000
void Mysort(int a[],int n);
void Myswap(int &x,int &y);

void Myswap(int &x,int &y) { int temp=0; temp=x; x=y; y=temp; }

void Mysort(int a[],int n)
{
int c=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(a[j]>a[j+1]) //假如前面的比后面的大,就把前面的放到后面
Myswap(a[j],a[j+1]);
}
}

int main(int argc, char* argv[])
{
int b[10]={2,12,54,3,5,2,4,7,14,6};
srand((unsigned)time(NULL));
//产生2万个随机数
int a[NUM_LEN];
for (int i=0; i<NUM_LEN; i++)
a[i]=rand()%101; //产生0-101

float nstart=clock();
Mysort(a,NUM_LEN); //排序
for( i=0;i<NUM_LEN;i++)
printf("%d\n",a[i]);
float nend=clock();
printf("排序所用时间:%fs\n",(nend-nstart)/1000);

return 0;

}

这个是10个元素排序的占用时间





下面是20000个数据的运行时间




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 冒泡排序