选择排序O(n^2)与快速排序O(nlogn)的优越性代码体现
随机函数生成一个超大数组:
【code】:
#include <iostream>
#include <stdio.h>
#include<time.h>
#include<stdlib.h>
#include<dos.h> using namespace std; int main()
{
freopen("random.txt","w",stdout);
int n;
scanf("%d",&n);
int i;
srand(time(NULL));
printf("%d\n",n);
for(i=;i<n;i++)
{
printf("%d ",rand());
}
printf("\n");
fclose(stdout);
return ;
} /*
time_t sTime,fTime;
fTime=clock();
_sleep(1000);
sTime=clock(); //获取查找完成后的时间
double duration=(double)(sTime-fTime)/CLOCKS_PER_SEC; //计算查找用时
printf("此查询用时%lf秒\n\n",duration); */
快速排序(文件输入输出):
【code】:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<time.h> using namespace std; int partition(int *a,int left,int right)
{
a[] = a[left]; //设置a[left]为主键值,存于a[0],即以a[left]值将[left,right]区间一分为二
while(left<right)
{
while(left<right&&a[right]>=a[]) right--; //从右边开始找到比主键值a[0]小的值,移到左边
a[left]=a[right];
while(left<right&&a[left]<=a[]) left++; //从左边开始找到比主键值a[0]大的值,移到右边
a[right]=a[left];
}
a[left] = a[]; //跳出while循环后的left==right,此时,区间已经一分为二了,将a[left]的值还原
return left;
} void QuickSort(int *a,int left,int right)
{
if(left<right) //快拍区间要大于1
{
int mid = partition(a,left,right); //进行一次划分,以a[left]划分区间为左右两个区间
QuickSort(a,left,mid-); //对左区间进行进一步划分
QuickSort(a,mid+,right); //对左区间进行进一步划分
}
} int a[]; int main()
{
int n; freopen("random.txt","r",stdin);
freopen("quicksortout.txt","w",stdout); scanf("%d",&n);
int i;
for(i=;i<=n;i++)
{
scanf("%d",a+i);
} time_t ftime,stime;
ftime = clock(); //获取排序前的时间 QuickSort(a,,n); stime = clock(); //获取排序后的时间
double duration=(double)(stime-ftime)/CLOCKS_PER_SEC; //计算排序用时 for(i=;i<=n;i++)
{
printf("%d ",a[i]);
}
putchar(); freopen("CON","w",stdout);
printf("快速排序用时%lf\n",duration); return ;
}
选择排序:
【code】:
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <algorithm> using namespace std; void ChooseSort(int *a,int l,int r)
{
int i,j;
for(i=l;i<=r;i++)
{
for(j=i+;j<=r;j++)
{
if(a[i]>a[j])
{
swap(a[i],a[j]);
}
}
}
} int a[]; int main()
{
int n; freopen("random.txt","r",stdin);
freopen("choosesortout.txt","w",stdout); scanf("%d",&n);
int i;
for(i=;i<=n;i++)
{
scanf("%d",a+i);
} time_t ftime,stime;
ftime = clock(); //获取排序前的时间 ChooseSort(a,,n); stime = clock(); //获取排序后的时间
double duration=(double)(stime-ftime)/CLOCKS_PER_SEC; //计算排序用时 for(i=;i<=n;i++)
{
printf("%d ",a[i]);
}
putchar();
fclose(stdin);
fclose(stdout); freopen("CON","w",stdout);
printf("选择排序用时%lf\n",duration);
fclose(stdout); return ;
}
随机生成50000的随机数据
对比两种排序的时间优越性:
快速排序:
选择排序:
选择排序O(n^2)与快速排序O(nlogn)的优越性代码体现的更多相关文章
- 冒泡排序、选择排序、直接插入排序、快速排序、折半查找>从零开始学JAVA系列
目录 冒泡排序.选择排序.直接插入排序 冒泡排序 选择排序 选择排序与冒泡排序的注意事项 小案例,使用选择排序完成对对象的排序 直接插入排序(插入排序) 快速排序(比较排序中效率最高的一种排序) 折半 ...
- [PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)
冒泡排序: function bubbleSort($array){ $len=count($array); //该层循环控制 需要冒泡的轮数 for($i=1;$i<$len;$i++){ / ...
- PHP实现快速排序、插入排序、选择排序
1.快速排序 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都 ...
- php 实现冒泡算法排序、快速排序、选择排序,插入排序
许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要 ...
- php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序
<?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){ $num=count($arr); ...
- 数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现
这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...
- Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序 算法性能分析
阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ...
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...
- java实现冒泡排序,选择排序,插入排序,快速排序(简洁版)及性能测试
1.冒泡排序是排序里面最简单的了,但性能也最差,数量小的时候还可以,数量一多,是非常慢的. 它的时间复杂度是O(n*n),空间复杂度是O(1) 代码如下,很好理解. public void bubbl ...
随机推荐
- 转 oracle 11g 导出空表
1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出. 2.设置deferred_segment_creation 参数为FALSE后,无论是 ...
- Web.config加密和解密
在系统部署的时候,大家都会遇到关于用户凭证的安全性问题,而对于数据库连接的相关的信息,有些时候客户也需要我们对其加密,防止信息泄露,在此将加密和解的方法记录于此: 首先用管理员的权限启动cmd命令窗口 ...
- css3 过渡记
CSS3 过渡 CSS3的transition允许CSS的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击,获得焦点,被点击或对元素任何改变中触发,并平滑地以动画效果改变CSS的属性值. t ...
- Ajax--跨域访问的三种方法
一.什么是跨域 我们先回顾一下域名地址的组成: / script/jquery.js http:// (协议号) www (子域名) google (主域名) (端口号) script/jquer ...
- Ehcache(2.9.x) - API Developer Guide, Cache Eviction Algorithms
About Cache Eviction Algorithms A cache eviction algorithm is a way of deciding which element to evi ...
- 【Cocos2d入门教程六】Cocos2d-x事件篇之触摸
Cocos游戏当中产生一个事件时,可以有多个对象在监听该事件,所以有优先级(Priority).优先级越高(Priority值越小),事件响应越靠前. 关系图: 新 事件分发机制:在2.x 版本事件处 ...
- 和阿文一起学H5--设计稿尺寸全攻略
- sql常识-BETWEEN 操作符
BETWEEN 操作符 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围.这些值可以是数值.文本或者日期. SQL BETWEEN 语法 SELECT column_name(s ...
- vc++字符转换
测试环境: vs2008 开发语言:C++ #include <iostream>#include <windows.h>#include <string> // ...
- java学习笔记_GUI(5)
demo如何为不同的button创建对应的响应函数 import javax.swing.*; import java.awt.event.*; import java.awt.*; class My ...