用多线程推断高速排序和冒泡排序的速度

一般的,我们知道快排是优于冒泡排序的,以下就让我们用多线程验证一下,详细操作:先产生一个随机整数n(大于10),再产生n个随机正数存放于数组中。然后创建两个线程并发地对锁生成的随机整数进行排序,当中一个线程採用冒泡排序,还有一个线程採用高速排序,最后比較这两个线程哪个先完毕排序

闲话少说哈,上代码:

结果分析:

(1)当随机数个数取值为10、100时。普通情况下。若冒泡排序的进程先调用,冒泡排序先完毕。否则高速排序先完毕(线程运行start()函数时并不能说明线程開始运行,仅仅是增加了就绪队列,执不运行由cpu决定。所以这两个线程的调用还是存在微小的时间差,预计此时快排和冒泡时间差也非常小)

(2)当随机数取值为1000、10000时,普通情况下,不管哪个进程先调用,都是快排优先

(3)当随机数取值大于等于100000时,能够看到快排结束非常久了冒泡排序才运行完

综合来说,快排是远远优于冒泡排序的

时间: 2025-01-03 08:29:09

用多线程推断高速排序和冒泡排序的速度的相关文章

C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序,然后是測试的样例.代码位置:http://download.csdn.net/detail/luozuolincool/8040027 排序类: public class Sortings { //插入排序 public void insertSort(int[] array) { int temp = 0; int index = 0; for (int i = 0; i <

具体解释Redis源代码中的部分高速排序算法(pqsort.c)

看标题.你可能会疑惑:咦?你这家伙.怎么不解说完整的快排,仅仅讲一部分快排---.- 哎,冤枉. "部分快排"是算法的名字.实际上本文相当具体呢.本文差点儿与普通快排无异.看懂了本文,你对普通的快排也会有更深的认识了. 高速排序算法(qsort)的原理我们大都应该了解.本文介绍的是部分高速排序算法. 事实上其算法本质是一样的,仅仅只是限定了排序的左右区间.也就是仅仅对一个数字序列的一部分进行排序.故称为"部分高速排序算法".简称:pqsort Redis项目中的pq

高速排序算法C++实现

//quick sort //STL中也有现成的高速排序算法.内部实现採用了下面技巧 //1)枢轴的选择採取三数取中的方式 //2)后半段採取循环的方式实现 //3)高速排序与插入排序结合 #include<vector> #include<iostream> #include<algorithm> using namespace std; //这一版本号是最简单实现版本号.对于高速排序的优化主要有下面几个方面: //1)枢轴的选择.若枢轴选取不全适.比方,若每次递归时

交换排序之高速排序

今天大鹏哥跟大家一起学习下交换排序中的高速排序. 高速排序是对冒泡排序的一种改进.它的基本思想是.通过一趟排序将待排记录切割成独立的两部分,当中一部分记录的keyword均比还有一部分的keyword小.则可分别对这两部分记录继续进行排序,以达到真个序列有序. 高速排序基本步骤: Step1.定义两个变量low和high,他们的初值分别为low和high,此外另一个变量pivotkey. Step2.首先从high所指位置向前搜索找到第一个keyword小于pivotkey的记录和pivotke

排序算法之高速排序(Java)

//高速排序 public class Quick_Sort { // 排序的主要算法 private int Partition(int[] data, int start, int end) { int mid_data = data[end];// 选取最后最个数作为中间值哨兵,从開始进行遍历,每一个数与之比較 int index = start; // 记录比哨兵小的数字在左端的位置或个数 // 注意要考虑start = 0的情况,和<算法导论>中的伪码有差别 for (int i =

高速排序--双边扫描与单边扫描的实现

高速排序 时间复杂读O(N*logN),最差O(N^2),平均O(N*logN) 主要思想是选取一个标志位,大于标志位的放到右边.小于标志位的放到左边.在以标志位为切割,分而制之,左递归,右递归.直到完毕. 高速排序的思想(双边扫描) 高速排序就像一个数据快,前后各有一个下标(指针)i/j,随机选取(此处取下标为0的)一个元素作为标志位.存储在暂时变量中(tmp),j从后向前移动(j--)直到碰到比tmp还要小的数时与i交换,此时i開始像后走,直到遇到第一个比tmp大的数,与j交换. 递归直至完

算法整理(二)---高速排序的两种实现方式:双边扫描和单边扫描

首先简单谈下高速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).由于用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法.基本思想是分治法,这位大大的http://blog.csdn.net/morewindows/article/details/6684558 讲的很清楚了,分治法+挖坑法,我就不多说了.就是以某个数为參照,使得左边的都小于他,右边的数都大于他.然后对他的左右两个区间採取相同的方法进行递归. 就其总体

多线程搜索与排序

前言:多线程搜索数组和排序在实际开发中是一个很常见的场景,我们可能会通过数组保存一些业务数据,通过搜索达到自己想要的数据或者对数据按照一定的业务规则排序,而在技术选择上一般最常见的技术就是for循环遍历和各种排序算法,这种搜索/排序技术很简单,而我们今天将要探讨的是通过多线程搜索和排序,如何利用多线程的优势去高效的完成搜索和排序是本篇博客聚焦的重点 本篇博客目录 一:多线程搜索 二:所线程排序 三:总结 一:多线程搜索 1.1:创建线程池      为了提升多线程的性能,我们把线程放在线程池集中

经典排序算法 - 冒泡排序Bubble sort

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第