快速排序小结
2017-07-23 19:53
169 查看
定义:快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(nlogn)次比较。事实上,快速排序通常明显比其他Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,并且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。快速排序,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。
代码实践:接下来就是代码级别的了。
package com.bjpowernode.struts;
import java.util.ArrayList;
/**
* Created by lenovo on 2017/7/23.
*/
public class 快速排序 {
public static int QuickPartition(int [] R, int low, int high){
int base=R[low];
while(low<high){
//从右向左开始找,
while ((low<high) && (R[high]>=base))
//循环体
high--;
R[low]=R[high];
while((low<high) && (R[low]<=base))
//循环体
low++;
R[high]=R[low];
}
R[low]=base;
return low;
}
//完整的快速排序使用递归
public static int[] QuickSort(int [] R,int low,int high){
int temp=QuickPartition(R,low,high);
QuickPartition(R,low,temp-1);
QuickPartition(R,temp+1,high);
return R;
}
public static int[] sort(int[] array) {
return QuickSort(array, 0, array.length - 1);
}
//测试
public static void main(String[] args) {
int [] a={45,38,66,90,88,10,25,46};
QuickSort(a,0, 7);
System.out.println("最终结果");
int [] sorted= sort(a);
for (int i : sorted) {
System.out.print(i + " ");
}
}
}
在这个过程中遇到了一个小小的问题,想起来都是自己给自己挖的坑,见过坑别人的,还是头一次看见坑自己的。
时间复杂度的衡量:
最好的nlog2n,最差的时候就直接是n的平方了。
以上就是个人对快速排序的一个简单的小结,欢迎走过路过的博友们拍砖。
看下列的图片形象的感知一下快速排序的操作。(这个图是从别的地方看到的,感觉很形象就借用了。)
代码实践:接下来就是代码级别的了。
package com.bjpowernode.struts;
import java.util.ArrayList;
/**
* Created by lenovo on 2017/7/23.
*/
public class 快速排序 {
public static int QuickPartition(int [] R, int low, int high){
int base=R[low];
while(low<high){
//从右向左开始找,
while ((low<high) && (R[high]>=base))
//循环体
high--;
R[low]=R[high];
while((low<high) && (R[low]<=base))
//循环体
low++;
R[high]=R[low];
}
R[low]=base;
return low;
}
//完整的快速排序使用递归
public static int[] QuickSort(int [] R,int low,int high){
int temp=QuickPartition(R,low,high);
QuickPartition(R,low,temp-1);
QuickPartition(R,temp+1,high);
return R;
}
public static int[] sort(int[] array) {
return QuickSort(array, 0, array.length - 1);
}
//测试
public static void main(String[] args) {
int [] a={45,38,66,90,88,10,25,46};
QuickSort(a,0, 7);
System.out.println("最终结果");
int [] sorted= sort(a);
for (int i : sorted) {
System.out.print(i + " ");
}
}
}
在这个过程中遇到了一个小小的问题,想起来都是自己给自己挖的坑,见过坑别人的,还是头一次看见坑自己的。
时间复杂度的衡量:
最好的nlog2n,最差的时候就直接是n的平方了。
以上就是个人对快速排序的一个简单的小结,欢迎走过路过的博友们拍砖。
相关文章推荐
- 快速排序 知识点小结
- 关于java中快速排序和冒泡排序的小结
- 快速排序 排序函数的个人小结
- 桶排序、冒泡排序、快速排序 -- 算法学习 小结篇
- PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
- 快速排序 -- 算法小结
- 快速排序(Quick Sort)小结
- 快速排序,插入排序,归并排序,计数排序,基数排序,堆排序
- 快速排序
- 快速排序、堆排序、希尔排序实现
- 快速排序
- 排序总结JS版(冒泡排序、简单选择排序、快速插入排序、希尔排序、堆排序、快速排序)
- 常用算法——快速排序
- 快速排序
- 快速排序 quicksort
- 快速排序 快速搞定
- 双指针快速排序
- 快速排序一
- 算法导论之快速排序文档
- [汇编版]冒泡排序、快速排序、堆排序