快速排序、冒泡排序

我目前最常用的两种排序:冒泡排序和快速排序

比较一下他们的性能:

 1 #include<stdio.h>
 2
 3 void QuickSort(int * a,int left,int right)
 4 {
 5     if(left>right)
 6     {
 7         return;
 8     }
 9     int stand=a[left];
10     int i=left;
11     int j=right;
12     //得到基准数位置
13     while(i!=j)
14     {
15         while(i<j&&a[j]>=stand)
16         {
17             --j;
18         }
19         while(i<j&&a[i]<=stand)
20         {
21             ++i;
22         }
23         if(i<j)
24         {
25             int temp=a[i];
26             a[i]=a[j];
27             a[j]=temp;
28         }
29     }
30     //将基准数放入找出的位置
31     a[left]=a[i];
32     a[i]=stand;
33     //递归处理
34     QuickSort(a,left,i-1);
35     QuickSort(a,i+1,right);
36     return;
37 }
38
39 void  BubbleSort(int * a,int n)
40 {
41     for(int i=0;i<n-1;i++)
42     {
43         for(int j=0;j<n-1;j++)
44         {
45             if(a[j]>a[j+1])
46             {
47                 int temp=a[j];
48                 a[j]=a[j+1];
49                 a[j+1]=temp;
50             }
51         }
52     }
53 }
54
55 int main()
56 {
57     int * a=new int[10000];
58     for(int i=0;i<10000;i++)
59     {
60         a[i]=10000-i;
61     }
62     QuickSort(a,0,9999);
63     //BubbleSort(a,9999);
64 /*    for(int i=0;i<10000;i++)
65     {
66         printf("%d\n",a[i]);
67     } */
68     return 0;
69 }

运行结果显示:

在数据量较小时冒泡排序和快速排序性能差不多,冒泡有时性能还会更高些,可能是因为快排用的递归要函数出入栈的原因。。。。。。

但随着数据量的增大,快速排序的性能会比冒泡高得多。

数组长度为10000时排序耗时(以最复杂情况测试)

快速排序:

冒泡排序:

时间: 2024-10-20 23:28:12

快速排序、冒泡排序的相关文章

php排序-快速排序-冒泡排序-顺序排序

//快速排序 $arr = array(32,31,56,4,234,46,466,86,5); function kuaisu($arr){if(!is_array($arr) || empty($arr)){return array();}//获取数组的长度$len = count($arr); //如果数组中只有一个元素,直接返回数组if($len <= 1){return $arr;}$key[0] = $arr[0];$left = array();$right = array();

交换排序算法---冒泡排序与快速排序

本文介绍两种交换排序方法:冒泡排序.快速排序 冒泡排序 冒泡排序基本思想 每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列重复前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了.因此,复杂度在最坏的情况下是O(N ^2). 冒泡排序实现过程 将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡.根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘

【PHP面试题】通俗易懂的两个面试必问的排序算法讲解:冒泡排序和快速排序

又到了金三银四找工作的时间,相信很多开发者都在找工作或者准备着找工作了.一般应对面试,我们无可厚非的去刷下面试题.对于PHPer来说,除了要熟悉自己所做的项目,还有懂的基本的算法.下面来分享下PHP面试中常会问到的算法:冒泡排序和快速排序 冒泡排序:一一对比排序 基本思想: 重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小)错误就把他们交换过来.走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成. 图解: 1.第一次:拿着数组的第一个元素

一天一个Java基础——排序

一天一个系列的第一篇,看看自己能否坚持下去,加油! 冒泡排序与快速排序 冒泡排序,人生中第一次面试,nice的考官问我能不能默写下来 快速排序,感觉高大上,分治思想,必学 1 package One; 2 3 public class Test_sort { 4 5 public static void main(String[] args) { 6 int[] a = { 2, 9, 5, 4, 8, 1 }; 7 // sort(bubble_sort); 8 quick_sort(a, 0

交换排序算法

交换排序的基本思想是:两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求时则进行交换,直到整个序列全部满足要求为止. 交换排序算法分为冒泡排序和快速排序 冒泡排序(Bubble Sort)是一种最简单的交换排序方法,它通过两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记录如气泡一般逐渐往上"漂浮"(左移) 或者使关键字大的记录如石块一样逐渐向下"坠落"(右移). 代码 void bubbleSort(int[] list){ for(i

JavaScript实现常用的排序算法

▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排序.希尔排序.直接选择排序 ▓▓▓▓▓▓ 交换排序 交换排序是一类在排序过程中借助于交换操作来完成排序的方法,基本思想是两两比较排序记录的关键字,如果发现两个关键字逆序,则将两个记录位置互换,重复此过程,直到该排序列中所有关键字都有序为止,接下来介绍交换排序中常见的冒泡排序和快速排序 ▓▓▓▓▓▓

php基础知识

回顾 函数: 形参默认值, 返回值 作用域: 全局作用域(全局变量)和局部作用域(局部变量) 跨域访问变量: 引用传递, $GLOBALS, global关键字 匿名函数: 没有函数名,变量访问(可变函数) 可变函数: 一个变量保存的值是函数名. 伪类型: number,mixed,void,callback 数据类型判断: PHP不应该相信任何外来数据 数据类型转换: 自动转换和手动(强制转换)转换 文件包含: 代码复用, HTML布局 四种方式: include和include_once,r

C语言排序算法复习

排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔排序,归并排序,堆排序,8大的还有基数排序.各有各的版本,代码写法也各不相同.所以这里以整理思路为先,代码只是作为自己的一个备份. 搞清楚的概念:稳定排序和不稳定排序,就看序列中两个值相等的数,排完序之后的相对位置是否改变,如果改变了就不稳定. 内部排序和外部排序,只用到内存即可完成排序的就叫内部排

初探几种排序算法

多种排序算法的总结(不包括复杂度的详细推算) 稳定排序与不稳定排序 稳定排序:相同元素在排序中的相对位置不改变. 不稳定排序:相同元素在排序中的相对位置改变. 内部排序与外部排序: 内部排序:待排的记录与内容都放在计算机的随机存储器中进行的排序过程 外部排序:一般指待排序记录的数量很大,以致内存中一次不能完全容纳全部的记录,在排序过程中,需要对外存进行访问的排序过程. 排序算法的复杂度: 在此我们一般只要考虑的就是时间复杂度,当然个别排序的空间复杂度也很大,如希尔排序.这里时间复杂度的计算方法和

十种常见排序算法

1.常见算法分类 十种常见排序算法一般分为以下几种: (1)非线性时间比较类排序:交换类排序(快速排序和冒泡排序).插入类排序(简单插入排序和希尔排序).选择类排序(简单选择排序和堆排序).归并排序(二路归并排序和多路归并排序): (2)线性时间非比较类排序:计数排序.基数排序和桶排序. 总结: (1)在比较类排序中,归并排序号称最快,其次是快速排序和堆排序,两者不相伯仲,但是有一点需要注意,数据初始排序状态对堆排序不会产生太大的影响,而快速排序却恰恰相反. (2)线性时间非比较类排序一般要优于