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

来源:互联网 发布:手机移动数据自动开启 编辑:程序博客网 时间:2024/06/06 02:22

读的书越多,感慨就越多。与其得过且过,不如现在开始努力。

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

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


冒泡算法是我在学校学到的第一个算法,很简单,但是时间复杂度是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 20000void 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个数据的运行时间

0 0
原创粉丝点击