快速排序法(QuickSort)——交换类排序法(java实现)
来源:互联网 发布:王晨芳 网络黄金 编辑:程序博客网 时间:2024/05/21 22:38
快速排序法(Quicksort)思想与java实现
快速排序法是一种分治排序的算法,通过两个元素的交换来消除线性表中的多个逆序,将数组有计划的分为两个部分,然后再分别对两个部分进行递归进行排序。
Quicksort的基本思想如下
从线性表选取一个基准元素Key(通常选取第一个元素),在线性表两段利用指针遍历元素对key进行比较交换。从而使得key左边的元素小于等于key,key右边的元素大于Key。把key左右的元素看作两个子表,利用递归思想对子表采用上述方法进行递归,从而获得原线性表的有序列表。Quicksort的最坏时间复杂度为O(n²),最坏情况下的比较次数为n(n-1)/2。
与冒泡排序(Bubblesort)的比较
Bubblesort在扫描过程中只对相邻的两个元素进行比较,也就是说在互换两个相邻元素时只能消除一个逆序。如果通过两个非相邻元素的交换,便能够消除线性表中的多个逆序,便会大大加快排序的速度。Bubblesort的最坏时间复杂度同为O(n²),最坏情况下的比较次数为n(n-1)/2。但平均复杂度Bubblesort为O(n²),Quicksort为O(n*logn),以2为底。
快速排序法的Java实现
public class QuickSort{ public static void main(String[] args){ int arr[] = {6,5,7,2,9,10,3}; sort(arr,0,arr.length-1); pt(arr); } public static void pt(int []arr){ for(int a:arr) //遍历数组进行打印 System.out.print(a+" "); System.out.println(); } public static int quicksort(int arr[],int a,int b){ int key = arr[a]; //设置基准元素。 int p1 = a; //设置左指针 int p2 = b; //设置右指针 while(p1<p2){ while(p1<p2 && arr[p2] >= key) //从右边开始找小于key的元素,找到则停止进行交换。 p2--; arr[p1] = arr[p2]; //改变目标元素的位置。 while(p1<p2 && arr[p1] <= key) //同理,从左边开始找大于key的元素。 p1++; arr[p2] = arr[p1]; } arr[p1] = key; //完成基准元素位置的设定,此时基准元素为中位元素。 return p1; } public static void sort(int arr[],int a,int b){ //递归 if(a<b){ //限制递归次数,防止无限递归。 int mid = quicksort(arr,a,b); sort(arr,a,mid-1); sort(arr,mid+1,b); } }}//道力之限,愿力所破。
这个视频中老师对快速排序法思想的讲解还是不错的,但是代码不够简洁。
阅读全文
1 0
- 快速排序法(QuickSort)——交换类排序法(java实现)
- 快速排序法 quickSort---java
- 快速排序法(QuickSort)c++实现
- 算法分析之排序:交换排序之二——快速排序(QuickSort)
- Java快速排序(QuickSort)算法实现
- 快速排序法 QuickSort
- 排序——快速排序(QuickSort)
- 排序——快速排序(QuickSort)
- Java实现快速排序排序QuickSort
- 快速排序实现(QuickSort)
- 快速排序QuickSort(Java)
- java快速排序QuickSort
- Java 快速排序 quicksort
- QuickSort快速排序-Java
- quicksort 快速排序 java
- 简单重温快速排序法(QuickSort)
- 【算法】快速排序法:Quicksort
- Algorithm——Quicksort(快速排序)
- LeetCode-- Longest Substring Without Repeating Characters
- WordPress代码编辑页面支持的HTML标签
- 跟我开始从0学Android--从0学java--java简单介绍开始第一个java项目
- Android实现底部半透明弹出框PopUpWindow
- java三种工厂模式:简单工厂、工厂方法、抽象工厂
- 快速排序法(QuickSort)——交换类排序法(java实现)
- 浅谈CSS盒子模型
- Android 点击变色,报错 java.lang.IllegalStateException
- 710总结
- Java基础之ArrayList和HashMap的遍历
- C++程序员学Java系列之十一:流程控制语句switch,case,break,default
- Python中lambda的使用
- 【“盛大游戏杯”第15届上海大学程序设计联赛 G】【暴力模拟或状态DP高效做法】战斗
- ZOJ-3645 BiliBili(高斯消元)