选择排序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 ...
随机推荐
- vsftp实现ftps加密传输数据
FTP明文传输数据,不太安全,ftp+ssl可以实现传输加密=ftps 01.创建FTP用户 user -d /ftp_www -s /sbin/nologin mvpbang echo " ...
- Jersey(1.19.1) - Client API, Security with Http(s)URLConnection
With Http(s)URLConnection The support for security, specifically HTTP authentication and/or cookie m ...
- Linux 命令 - cd: 切换工作目录
命令格式 cd [directory] 实例 a) 将工作目录切换成主目录. cd # 或 cd ~ b) 将工作目录切换成当前工作目录的父目录. cd .. c) 将工作目录切换成上一个的工作目录. ...
- ZooKeeper(3.4.5) - 开源客户端 Curator(2.7.0) 的简单示例
一.创建会话 1. 创建会话 package com.huey.dream.demo; import org.apache.curator.framework.CuratorFramework; im ...
- 运用NPOI操作EXCEL
一.引入NPOI程序集 下载地址:http://pan.baidu.com/s/1qWI3Vgo 二.运用NPOI导出成excel文件 protected void btnOutExcel_Click ...
- React-Native的基本控件属性方法
对React-Native的学习,从熟悉基本控件开始. View 属性方法 序号 名称 属性Or方法 类型 说明 1 accessibilityLabel 属性 string 2 accessib ...
- css笔记——移动端
苹果手机 /*按钮样式:*/input[type=button], input[type=submit], input[type=file], button { cursor: pointer; -w ...
- 【转载】干货来袭!Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载七)LAMP集成安装
学Linux做程序开发也好,做系统管理也好,做网络管理员也好,做系统运维也好,不会LAMP和LNMP,那就等于连皮毛都不会!本篇是文字版的LAMP集成安装,下次连载我们要介绍LNMP的文字版安装.有喜 ...
- Z-Stack ZMain学习
[注:本文源自博客园http://www.cnblogs.com/cherishui/,为尊重劳动者成果,如需转载请保留此行] 在TI已有的Z-Stack的工程下面,打开已有的demo文件,通过分析不 ...
- CCNA第一讲笔记
园区网:一组连续的局域网(校园网.企业内部网) 园区网拓扑: 一层楼的PC连接到一台交换机(同一层的PC可以互联):一栋楼的每层的交换机连接到同一台交换机(整栋楼的PC可以互联):每栋楼的交换机连接到 ...