[数据结构]原创!amor详解 快速排序 使用以及心得
2012-12-11 13:59
701 查看
amor详解 快速排序 使用以及心得
这是针对快速排序的详解,可以还不是很清楚,希望大家指正! 原文来自 http://www.liaoguodong.cn 作者 amor 欢迎大家前来!!
前言:快速排序作为专家测试,公认的最快的排序算法,相比冒泡排序,选择排序,插入排序等低级排序而言,是一个优秀的排序算法.对于初学者和兴趣爱好者有着较好的教学目的.在这人,我详解一下快速排序的原理,以及心得
快速排序的原理:
第一步:取第一个值为参考值mid
第二步:设立两个指针(下标),i指向第一个元素,j指向最后一个元素
第三步:从j开始逐步向前找一个小于mid的数与其交换
第四步:从i开始逐步向后找一个大于mid的数与其交换
如果i,j不相遇,那么重复第三步和第四步
快速排序的思想:将一个大的问题划分为一个小的问题,再这个小的问题细分
快速排序之所以快速,首先来说在时间上:快速排序的执行时间为=nlog2N
而低级排序为=n*n
那么就显而易见了,例如一个100个数字,那么低级排序的时间为100*100=10000O
注意O,为时间单位
而同样的100个数字,快速排序的时间为=100*log2100 =700
所以,在时间上,快速排序大大的超过了以往的低级排序速度
此图请结合下面代码一起阅读
下面是代码,使用,测试方法,直接将以下代码,复制,执行就可以了!
这是针对快速排序的详解,可以还不是很清楚,希望大家指正! 原文来自 http://www.liaoguodong.cn 作者 amor 欢迎大家前来!!
这是针对快速排序的详解,可以还不是很清楚,希望大家指正! 原文来自 http://www.liaoguodong.cn 作者 amor 欢迎大家前来!!
前言:快速排序作为专家测试,公认的最快的排序算法,相比冒泡排序,选择排序,插入排序等低级排序而言,是一个优秀的排序算法.对于初学者和兴趣爱好者有着较好的教学目的.在这人,我详解一下快速排序的原理,以及心得
快速排序的原理:
第一步:取第一个值为参考值mid
第二步:设立两个指针(下标),i指向第一个元素,j指向最后一个元素
第三步:从j开始逐步向前找一个小于mid的数与其交换
第四步:从i开始逐步向后找一个大于mid的数与其交换
如果i,j不相遇,那么重复第三步和第四步
快速排序的思想:将一个大的问题划分为一个小的问题,再这个小的问题细分
快速排序之所以快速,首先来说在时间上:快速排序的执行时间为=nlog2N
而低级排序为=n*n
那么就显而易见了,例如一个100个数字,那么低级排序的时间为100*100=10000O
注意O,为时间单位
而同样的100个数字,快速排序的时间为=100*log2100 =700
所以,在时间上,快速排序大大的超过了以往的低级排序速度
此图请结合下面代码一起阅读
下面是代码,使用,测试方法,直接将以下代码,复制,执行就可以了!
import java.util.Arrays; public class 快速排序 { public static void fastsort(int []a ,int left,int right){ /* * 快速排序的原理: 第一步:取第一个值为参考值mid 第二步:设立两个指针(下标),i指向第一个元素,j指向最后一个元素 第三步:从j开始逐步向前找一个小于mid的数与其交换 第四步:从i开始逐步向后找一个大于mid的数与其交换 如果i,j不相遇,那么重复第三步和第四步 * */ //取参考值 int mid = a[left]; //设定两个指针 int i=left; int j=right; /* * * */ while(i<j){ //从j开始向前找一个小于mid的数与其交换 保证i和j不相等 /* * 此处不易懂,所以详细讲解一下。 当a[j]>mid的时候,那么表示此数比mid大,那么这一位不动,然后把j的位置向前移动,然后又判断 * 当条件不符合的时候表示a[j]<mid,那么就是这个值比参考值要小,那么更进入if判断,和mid交换位置,从而达到mid的左边的值全部比mid大 * 注意:a[j]>=mid当不等于的时候,那么当数组有等等的数的时候,循环会陷入死循环的位置.切记!!! * */ while(i<j&&a[j]>=mid){ j--; } if (i<j) { int b=a[i]; a[i]=a[j]; a[j]=b; } /* * 此处同上,保证mid右边的值全部比mid小 * * */ //从i开始向后找一个大于mid的数与其交换 while(i<j&&a[i]<=mid){ i++; } if (i<j) { int b=a[i]; a[i]=a[j]; a[j]=b; } } /* * 例如:原数组为int[] a={5,1,7,9,3,2,4,6,8}; * 那么在这人的排序后,会变成 5居中,1,3,2,4在5的右边,但是不一定是有顺序的,,只能保证5的右边都比5小,那么,左边同理 * */ //i j相遇,就以mid为断点,左边的全小,右边全大 //左边有数才快速排序 if(left<i){ /*在这儿使用了递归,自己调用自己的方法,当i和j相等时候就表示已经完成了排序 * */ fastsort(a, left, i-1); } if(j<right){ fastsort(a, j+1, right); } } public static void main(String[] args) { int [] a={4,5,5,3,2,4,6,7,9,3}; // int[] a={5,1,7,9,3,2,4,6,8}; /* * Arrays.sort(a);这是一个比较简单的排序方式,但是原理仍然是使用的快速排序,只是被封装了而已 * */ // Arrays.sort(a); fastsort(a, 0, a.length-1); for(int i=0;i<a.length;i++){ System.out.print(a[i]+"\t"); } } }
这是针对快速排序的详解,可以还不是很清楚,希望大家指正! 原文来自 http://www.liaoguodong.cn 作者 amor 欢迎大家前来!!
相关文章推荐
- 数据结构上机实验-希尔排序,快速排序,堆排序
- 数据结构基础(4) --快速排序
- 数据结构之快速排序
- 数据结构与算法-----快速排序
- 数据结构与算法-----搜索和排序(C语言库函数的使用)
- 数据结构实验之排序八:快速排序
- 数据结构—单链表的排序以及逆置
- 数据结构(一)快速排序
- JAVAWEB开发之Maven的入门详解——Maven的安装以及项目的结构和Maven的使用以及私服的搭建与配置
- 【数据结构】——快速排序
- 数据结构基础(4) --快速排序
- 数据结构算法之快速排序
- 【数据结构与算法】快速排序
- 安卓使用Gson解析服务器返回Json数组,以及java服务器怎样返回list集合的Json数据(原创)
- 数据结构基础(4) --快速排序
- 数据结构实验之排序八:快速排序
- 数据结构之——快速排序
- [原创]使用DataList分页显示数据,双向排序,添加checkbox控件。
- 数据结构实验之排序八:快速排序
- STL sort 函数实现详解 作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现。以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的