八大排序学习之一冒泡排序
2016-10-27 15:43
176 查看
读的书越多,感慨就越多。与其得过且过,不如现在开始努力。
一直对算法不太感冒,自从实习后认识了很多通过算法进了大公司的大四毕业生,心里甚不是滋味。
好了牢骚发完,开始写冒泡算法。
冒泡算法是我在学校学到的第一个算法,很简单,但是时间复杂度是O(n^2),太高了,因为需要两次循环。
思路呢,就是经过两次遍历,每次取一个最大或者最小的出来。
按照循序一个个的检查,假如前面的比后面的大,就把前面的放到后面。
二话不说,直接贴上交换两个值代码:
下面的是完整代码:
这个是10个元素排序的占用时间
下面是20000个数据的运行时间
一直对算法不太感冒,自从实习后认识了很多通过算法进了大公司的大四毕业生,心里甚不是滋味。
好了牢骚发完,开始写冒泡算法。
冒泡算法是我在学校学到的第一个算法,很简单,但是时间复杂度是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个数据的运行时间
相关文章推荐
- 黑马程序员java学习— 数组的选择排序和冒泡排序
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
- [学习笔记]排序算法之冒泡排序
- 八大排序--冒泡排序
- java中选择排序,冒泡排序和二分法查找学习记录
- 数据结构学习笔记 --- 排序(冒泡排序、快速排序)
- 八大排序学习之八分配排序(计数排序、桶排序、基数排序}
- 算法系统学习-1排序-冒泡排序
- Java 八大排序之——冒泡排序
- 八大排序学习之四直接选择排序
- 选择排序和冒泡排序的学习
- 指针初步学习,运用指针进行冒泡排序,选择排序,插入排序和折半查找
- 黑马程序员—Java基础学习笔记之排序算法:选择排序&冒泡排序
- 学习笔记:二分法排序,选择排序,冒泡排序,以及递归算法.
- OC学习之道:C语言的冒泡排序与OC的冒泡排序之比较
- 学习笔记:冒泡排序、插入排序、选择排序、快速排序的实现
- 黑马程序员_java基础学习笔记之排序算法(选择排序、冒泡排序
- 冒泡排序 直接排序 学习笔记
- 八大排序之冒泡排序
- 八大排序学习之七堆排序