上一篇介绍了冒泡算法及其优化方案,但其优化是从每轮的比较次数上优化,而“鸡尾酒算法”可以从轮次上优化。一、什么时鸡尾酒排序?鸡尾酒排序又称为快乐小时排序,它基于冒泡排序进行的优化方案。二、鸡尾酒算法思想冒泡排序是元素单向比较,而鸡尾酒排序却是双向。列举一个最简单的栗子array[2, 3, 4, 5, 6, 7, 8, 9, 1],如果按照传统的冒泡排序进行操作,第一轮结果:[2, 3, 4, 5, 6, 7, 8, 1, 9],只有9和1交换;第二轮结果:...
function InsertSort($arr){$num = count($arr);for($i = 1; $i < $num; $i++){$key = $arr[$i];for($j = $i - 1; $j >= 0; $j--){if($arr[$j] > $key){$arr[$j + 1] = $arr[$j];$arr[$j] = $key;}}}return$arr; }function BubbleSort($arr){$num = count($arr);for( $i = 1; $i < $num; $i++ ){for($j = $num -1; $j >= $i; $j-- ){if( $arr[$j] < $arr[$j - 1] ){$tmp_val = $arr[$j - 1];$arr[$j - 1...
选择排序:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。选择排序说白了就是用索引去排序。话不多说,上代码》》》 package sdx;import java.util.Arrays;public class Main7 { ...
1.算法概述相较于归并排序,堆排序的时间复杂度也为O(n*log n),但空间复杂度远小于归并排序。堆排序用到了实用的数据结构——堆(heap),关于堆的详细介绍参看这里。堆排序基本思想:将待排序表建成一个大顶堆;取堆顶元素与堆的最后一个元素交换,删除最后一个元素,向下调整使得继续保持堆的特性;如此往复,直至堆剩下最后一个元素待排序表(26,5,77,1,61,11,59,15,48,19),堆排序过程如下:1.建立大顶堆2. 堆排序/*adjust to ...
import java.util.Scanner; /** * @author 杨川 * */ public class Sort { public static void main(String[] args) { int a[] = input(); insertSort(a); shellSort(a); selectSort(a); fastSort(a,0,a.length-1); for (int k = 0; k < a.length; k++) { System.out.print(a[k] + " "); } } static void fastSort(int[]a,int s,int t){ ...
算法思路:重复走访每两个相邻元素,比较大小交换位置,直至排序完成。有兴趣电话可以看一下这个【冒泡排序踢踏舞】的视频,很形象的演示了排序过程,额呵呵~~性质:冒泡排序是一种原地排序(只有常数个元素存到数组以外的空间),最坏的时间复杂度,和平均时间复杂度都是n2。*注: 冒泡排序是算法入门级别,是面试笔试时候的禁术,古往今来死在冒泡法上的应届生真可谓前仆后继...代码:int[] BubbleSort1(int[] a){int num; for (...
顾名思义,冒泡排序直观的意思是气泡越大冒的越快:),对应到我们的列表中就是数字最大的先选出来,然后依次进行。例如 myList = [1,4,5,0,6],比较方式为: 相邻的两个数字先进行比较,也就是myList[0]和myList[1],发现不是">"的关系,就继续比较myList[1]和myList[2]。。。依次进行,发现myList[2]>myList[3](及5>0),就进行交换,所以走完第一次全列表比较得到新列表[1,4,0,5,6],然后每一次扫描得到的新列表如下: 第一次...
继续C++11在头文件algorithm中添加的算法。至少我认为,在stl的算法中,用到最多的就是sort了,我们不去探索sort的源代码。就是介绍C++11新增的几个关于排序的函数。对于一个序列,我们怎么知道他是不是有序的呢?这就用到了:is_sorted 原型:template <class ForwardIterator>ForwardIterator is_sorted_until (ForwardIterator first, ForwardIterator last);template <class ForwardIterator, class Compare>ForwardIterator ...
排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料。废话不多说,下面逐一看看经典的排序算法: 1. 选择排序选择排序的基本思想是遍历数组的过程中,以i代表当前需要排序的序号,则需要在剩余的[i…n-1]中找出其中的最小值,然后将找到的最小值与i指向的值进行交换。因为每一趟确定元素的过程中都会有一个选择最大值的子流程,所以人们形象地称之为选择排序。举个实例...
基本思想希尔排序是基于插入排序的,又叫缩小增量排序。在插入排序中。标记符左边的元素是有序的,右边的是没有排过序的,这个算法取出标记符所指向的数据,存入一个暂时变量,接着,在左边有序的数组中找到暂时变量应该插入的位置,然后将插入位置之后的元素依次后移一位,最后插入暂时变量中的数据。试想。假如有一个非常小的数据项在靠近右端的位置上。把这个数据项插入到有序数组中时,将会有大量的中间数据项须要右移一位。这...
# 选择排序##本小节知识点:1. 【了解】选择排序2. 【掌握】选择排序的基本思想3. 【了解】练习---##1.选择排序- 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元 素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。---##2.选择排序的基本思想- 第一趟排序在所有待排序的n个记录中选出关键字最小...
这篇我们继续扯淡一下鸡尾酒排序,为了知道为啥取名为鸡尾酒,特意看了下百科,见框框的话,也只能勉强这么说了。 要是文艺点的话,可以说是搅拌排序,通俗易懂点的话,就叫“双向冒泡排序”,我想作为码农的话,不可能不知道冒泡排序,冒泡是一个单向的从小到大或者从大到小的交换排序,而鸡尾酒排序是双向的,从一端进行从小到大排序,从另一端进行从大到小排序。从图中可以看到,第一次正向比较,我们找到了最大值9. ...
Ultra-QuickSortTime Limit: 7000MS Memory Limit: 65536KTotal Submissions: 43446 Accepted: 15822DescriptionIn this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence issorted in ascending order. For the input sequence 9 1 0 5 4 , Ultra-QuickSort produces the output 0 1 4 ...
排序算法——堆排序~大器晚成~ 2012-03-08 09:46 阅读:11393 评论:5 查找算法——找到序列中第二大的数(修正版)~大器晚成~ 2012-03-06 10:35 阅读:5687 评论:66 排序算法——快速排序~大器晚成~ 2012-02-29 10:13 阅读:114175 评论:51 排序算法——冒泡排序~大器晚成~ 2012-02-28 09:40 阅读:5394 评论:9 牛×的可视化排序~大器晚成~ 2012-02-24 17:10 阅读:1678 评论:3 排序算法——插入排序~大器晚成~ 2012-02-23 12:14 阅读:2222...
本文记录快速排序算法的一个精美实现,关于其中的一些优化或者思路请参考如下资料:快速排序中的分割算法的解析与应用http://www.cnblogs.com/hapjin/p/5518922.htmlhttp://blog.csdn.net/hapjin/article/details/49785477http://blog.csdn.net/hapjin/article/details/49201341 publicclass QuickSort{//分割数组,将数组分成两部分. 一部分比pivot(枢轴元素)大,另一部分比pivot小privatestaticint parition(int[] arr, int left, ...