随机函数生成一个超大数组:

【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)的优越性代码体现的更多相关文章

  1. 冒泡排序、选择排序、直接插入排序、快速排序、折半查找>从零开始学JAVA系列

    目录 冒泡排序.选择排序.直接插入排序 冒泡排序 选择排序 选择排序与冒泡排序的注意事项 小案例,使用选择排序完成对对象的排序 直接插入排序(插入排序) 快速排序(比较排序中效率最高的一种排序) 折半 ...

  2. [PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)

    冒泡排序: function bubbleSort($array){ $len=count($array); //该层循环控制 需要冒泡的轮数 for($i=1;$i<$len;$i++){ / ...

  3. PHP实现快速排序、插入排序、选择排序

    1.快速排序 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都 ...

  4. php 实现冒泡算法排序、快速排序、选择排序,插入排序

    许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要 ...

  5. php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序

    <?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){    $num=count($arr);    ...

  6. 数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现

    这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...

  7. Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序 算法性能分析

    阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ...

  8. 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)

    2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...

  9. java实现冒泡排序,选择排序,插入排序,快速排序(简洁版)及性能测试

    1.冒泡排序是排序里面最简单的了,但性能也最差,数量小的时候还可以,数量一多,是非常慢的. 它的时间复杂度是O(n*n),空间复杂度是O(1) 代码如下,很好理解. public void bubbl ...

随机推荐

  1. 【XMLRPC实现跨语言编程】Tcl <----> python

    转载请声明出处,谢谢合作. # 期望一种能实现tcl.python两者解释器能双向通讯的结合体# py->tcl: from Tkinter import Tcl; tcl = Tcl(); t ...

  2. mysql千万级测试1亿数据的分页分析测试

    本文为本人最近利用几个小时才分析总结出的原创文章,希望大家转载,但是要注明出处 http://blog.sina.com.cn/s/blog_438308750100im0e.html 有什么问题可以 ...

  3. Spring(3.2.3) - Beans(3): Bean 实例的创建方式

    创建一个 Bean 实例对象的方法通常有如下方式: 调用构造器创建 Bean 实例 调用静态工厂方法创建 Bean 实例 调用实例工厂方法创建 Bean 实例 使用构造器创建 Bean 实例 XML ...

  4. Connection to https://dl-ssl.google.com refused 解决方案

    源  起 由于国内不能直接访问Google设在国外的服务器,因此更新Android SDK的时候会遇到 refused 的情况,在命令行ping dl-ssl.google.com显示“请求超时”,解 ...

  5. Google Protocol Buffer

    Google Protocol Buffer(protobuf)是一种高效且格式可扩展的编码结构化数据的方法.和JSON不同,protobuf支持混合二进制数据,它还有先进的和可扩展的模式支持.pro ...

  6. 正则Match

    Match match = Regex.Match("result=23&asdf=asdf", @"result=(\d+)&"); if ( ...

  7. 北大ACM(POJ1001-Exponentiation)

    Question:http://poj.org/problem?id=1001问题点:大数运算(求幂) #include <iostream> using namespace std; # ...

  8. 基于Tengine的反向代理详细配置

    系统环境: SUSE Linux Enterprise Server 10 SP1 (x86_64) 注:所有软件包都放置在/data/software目录下 nginx_tcp_proxy_modu ...

  9. signal信号类型列表

    Linux支持的信号列表如下.很多信号是与机器的体系结构相关的 信号值 默认处理动作 发出信号的原因 SIGHUP 1 A 终端挂起或者控制进程终止 SIGINT 2 A 键盘中断(如break键被按 ...

  10. OC3-父类指针指向子类对象

    // // Cat.h // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. ...