舞动的排序算法 快速排序
有感于这段来至Sapientia University 的舞蹈,生动有趣、寓教于乐,突然心血来潮,来一个看视频学排序吧。于是按照视频的步骤写了一个一样的快速排序算法。以前学过快排,只是觉得复杂,没有自己实现过,学得似懂非懂,今天看了这个视频,真让人印象深刻,真正把快速排序算法学懂了了,推荐学计算机的童鞋们都来看看。我很佩服这段舞蹈编排者的创意,把刚写的代码贴在下面留作纪念。
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。
参考百度百科 http://baike.baidu.com/view/19016.htm
下面的这段程序是我写的快速排序的java实现
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
int[] a = { 3, 0, 1, 8, 7, 2, 5, 4, 9, 6 };
int i = 0;
int j = a.length - 1;
quicksort(a, i, j);
}
private static void quicksort(int[] a, int i, int j) {
if (i < j) {
int start = i;
int end = j;
int pivot = i;
print(a, pivot);
boolean b = true;
while (i < j) {
if (b) {
if (a[j] < a[pivot]) {
System.out.println("a[" + pivot + "] > a[" + j
+ "] swap!");
swap(a, pivot, j);
pivot = j;
i++;
print(a, pivot);
b = false;
} else {
// System.out.println("a[" + pivot + "] < a[" + j
// + "] do nothing!");
j--;
}
}
if (b == false) {
if (a[i] > a[pivot]) {
System.out.println("a[" + i + "] > a[" + pivot
+ "] swap!");
swap(a, pivot, i);
pivot = i;
j--;
print(a, pivot);
b = true;
} else {
// System.out.println("a[" + i + "] < a[" + pivot
// + "] do nothing!");
i++;
}
}
}
quicksort(a, start, pivot - 1);
quicksort(a, pivot + 1, end);
}
}
private static void swap(int[] a, int i, int j) {
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
private static void print(int[] a, int pivot) {
for (int i = 0; i < a.length; i++) {
System.out.print("a[" + i + "]" + ",");
}
System.out.println();
System.out
.println("---------------------------------------------------------");
for (int i = 0; i < a.length; i++) {
System.out.print(" " + a[i] + " ,");
}
System.out.println();
System.out
.println("=========================================================");
System.out.println(" pivot : " + pivot);
}
}
输出
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
3 , 0 , 1 , 8 , 7 , 2 , 5 , 4 , 9 , 6 ,
=========================================================
pivot : 0
a[0] > a[5] swap!
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
2 , 0 , 1 , 8 , 7 , 3 , 5 , 4 , 9 , 6 ,
=========================================================
pivot : 5
a[3] > a[5] swap!
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
2 , 0 , 1 , 3 , 7 , 8 , 5 , 4 , 9 , 6 ,
=========================================================
pivot : 3
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
2 , 0 , 1 , 3 , 7 , 8 , 5 , 4 , 9 , 6 ,
=========================================================
pivot : 0
a[0] > a[2] swap!
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
1 , 0 , 2 , 3 , 7 , 8 , 5 , 4 , 9 , 6 ,
=========================================================
pivot : 2
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
1 , 0 , 2 , 3 , 7 , 8 , 5 , 4 , 9 , 6 ,
=========================================================
pivot : 0
a[0] > a[1] swap!
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
0 , 1 , 2 , 3 , 7 , 8 , 5 , 4 , 9 , 6 ,
=========================================================
pivot : 1
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
0 , 1 , 2 , 3 , 7 , 8 , 5 , 4 , 9 , 6 ,
=========================================================
pivot : 4
a[4] > a[9] swap!
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
0 , 1 , 2 , 3 , 6 , 8 , 5 , 4 , 9 , 7 ,
=========================================================
pivot : 9
a[5] > a[9] swap!
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
0 , 1 , 2 , 3 , 6 , 7 , 5 , 4 , 9 , 8 ,
=========================================================
pivot : 5
a[5] > a[7] swap!
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
0 , 1 , 2 , 3 , 6 , 4 , 5 , 7 , 9 , 8 ,
=========================================================
pivot : 7
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
0 , 1 , 2 , 3 , 6 , 4 , 5 , 7 , 9 , 8 ,
=========================================================
pivot : 4
a[4] > a[6] swap!
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
0 , 1 , 2 , 3 , 5 , 4 , 6 , 7 , 9 , 8 ,
=========================================================
pivot : 6
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
0 , 1 , 2 , 3 , 5 , 4 , 6 , 7 , 9 , 8 ,
=========================================================
pivot : 4
a[4] > a[5] swap!
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 9 , 8 ,
=========================================================
pivot : 5
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 9 , 8 ,
=========================================================
pivot : 8
a[8] > a[9] swap!
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
---------------------------------------------------------
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,
=========================================================
pivot : 9
下面是其它经典排序算法介绍,还有同样来至Sapientia University 创作的舞蹈视频,他们以舞蹈的方式演绎各种排序算法,创意无限,非常精彩
冒泡排序 参考百度百科http://baike.baidu.com/view/254413.htm
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
视频:
http://v.youku.com/v_show/id_XMzMyOTAyMzQ0.html
希尔排序 参考百度百科http://baike.baidu.com/view/178698.htm
希尔排序(Shell Sort),也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率,但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位
视频:
http://v.youku.com/v_show/id_XMzMyODk5MzI4.html
选择排序 参考百度百科http://baike.baidu.com/view/547263.htm
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
视频:
http://v.youku.com/v_show/id_XMzMyODk5MDI0.html
插入排序 参考百度百科http://baike.baidu.com/view/1193395.htm
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
视频:
http://v.youku.com/v_show/id_XMjU4NTY5MzEy.html
归并排序 参考百度百科http://baike.baidu.com/view/90797.htm
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
视频:
http://v.youku.com/v_show/id_XMzMyODk5Njg4.html
这个网站上还有这些经典排序算法很不错的图形演示 http://jsdo.it/norahiko/oxIy/fullscreen
分享到:
相关推荐
舞动的排序算法 快速排序 通过动画演示快速排序,很好的学习,课程资源。
舞动的排序算法 插入排序,通过视频的方式讲述排序算法的过程。
冒泡排序,舞动的bubble冒泡排序
为准确反映矿区35 kV供电线路舞动的情况,以中国平煤神马集团矿区35 kV及以下供电线路为研究对象,在输电线路舞动的三自由度动态数学模型的基础上,建立了基于分布参数微元算法的35 kV单导线输电线路舞动的数学模型。...
舞动的bubble
基于GA-BP神经网络算法的输电线路舞动预警方法.pdf
恒舞动卡F70 LEDShow 2014 恒舞动卡F70 LED控制卡软件 本软件是在原光盘内完整拷贝出来的,以及控制卡照片都是原机实物拍摄。 只提供软件及照片,不提供技术支持。 如何使用以及调试安装方法等自己可参考包内使用...
BFO细菌觅食算法改进优化算法
js实现舞动的小方块们,3D方块舞动,几何美感,高分web设计 js实现舞动的小方块们,3D方块舞动,几何美感,高分web设计 js实现舞动的小方块们,3D方块舞动,几何美感,高分web设计 js实现舞动的小方块们,3D方块舞动...
屏幕测试,舞动的裸女 有函数公式计算的结果,请仔细看咯~
覆冰导线舞动的数值计算分析,秦力,徐天元,利用假设模态法模拟导线舞动,导线的舞动表示为三个广义坐标。为避免繁琐的矢量运算,从能量角度采用拉格朗日法建立覆冰导线的非
舞动DB2之2_从Oracle到DB2开发
针对平煤矿区35 kV及以下输电线路的雷击和舞动问题,分析了矿区雷电和舞动灾害的基本活动规律,给出了具体的防雷及防舞动措施。实际应用表明,该防雷及防舞动措施可有效降低矿区输电线路事故跳闸率。
“拖影”,就是指3D游戏中,冷兵器在舞动时所“拖”出的光影。分析了“拖影”特效的图形变化规律, 提出了一种实用的“拖影”特效实现算法。借助该算法,应用程序可以根据兵器的运动轨迹, 自动产生“拖影” 效果。...
并且保留作者此版权信息 '****************************************************************************** 资料网2008beta1-舞动中国 <br>更新记录: 2005-6-17 前台页面制作 2005-6-18 后台页面...
覆冰四分裂导线舞动数值模拟方法,秦力,李亚南,覆冰四分裂导线舞动问题严重威胁超高压线路的安全运行,对舞动的理论研究可有效推动防舞技术的发展。采用具3个平动自由度和1个扭�
舞动青春分解动作与图解。完整版.doc
基于范德波尔方程的输电线舞动数学模型建立与分析,姜传明,王伟,输电导线的舞动是一个国际上关心的问题,而属于驰振的导线舞动,就曾给人类的输电工程带来过巨大的损失和危害。学术界与工程界曾
舞动今朝