Java实现快速排序算法
来源:互联网 发布:云计算架构工程师招聘 编辑:程序博客网 时间:2024/06/11 07:51
快速排序
一、 算法描述
快速排序是对冒泡排序的一种改进。在冒泡排序中,记录每次都是与相邻位置上的数据作比较,因此每次只能移动一个位置。而在快速排序中,记录的比较和移动都是从两端向中间进行的。
其主要思想:首先在待排序数组中选取一个基准值(作为比较对象),然后利用基准值将待排数组分成2个部分。基准值左边的数组的数据都小于或等于基准值;基准值右边的数组的数据都大于或等于基准值,然后分别对这两部分重复上述过程,直到整个数组变成有序数组。
显然,快速排序是一个递归的过程。
下面举例分析:
二、 算法分析
快速排序的趟数取决于递归的深度。
最好的情况:每次划分对一个记录定位后,该记录的左侧子序列与右侧子序列长度相等。
时间复杂度:O(nlog₂n)。
最坏情况:待排数组是正序或反序,那么每次划分都只能有一个子序列。
时间复杂度:O(n²)。
快速排序是一种不稳定的排序。
三、 算法实现(主要代码)
public class QuickSortArray { private void QuickSort(int[] arr, int lowIndex, int highIndex){ int lo = lowIndex; //左侧扫描的标记位 int hi = highIndex; //右侧扫描的标记位 int povit = arr[lowIndex]; //选取数组第一个值为比较的基准值 while(lo<hi){ while(lo<hi && povit<=arr[hi]) //右侧扫描 hi--; //右标记位向前移动一位 if(lo<hi){ //出现比基准值小的数 System.out.println(""); swap(arr,lo,hi); //交换2个值 lo++; //左标记位向后移动一位 } while(lo<hi && povit>=arr[lo]) //左侧扫描 lo++; //左标记位向后移动一位 if(lo<hi){ //出现比基准值大的数 System.out.println(""); swap(arr,lo,hi); //交换2个值 hi--; //右标记位向前移动一位 } } //成功进行了第一次划分,下面分别利用递归对基准值左右两侧的数组进行快速排序 if(lowIndex<lo){ QuickSort(arr,lowIndex,lo-1); } if(hi<highIndex){ QuickSort(arr,lo+1,highIndex); } } private void swap(int[] arr, int lo, int hi) { //交换数组的值 int temp = arr[hi]; arr[hi] = arr[lo]; arr[lo] = temp; for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+","); } }
0 0
- java实现快速排序算法
- java实现快速排序算法
- 算法-快速排序-java实现
- 快速排序算法Java实现
- java算法实现快速排序
- java实现快速排序算法
- 快速排序算法-java实现
- 快速排序算法Java实现
- 快速排序算法java实现
- java实现快速排序算法
- Java实现快速排序算法
- 快速排序算法Java实现
- Java实现快速排序算法
- 快速排序算法java实现
- java实现快速排序算法
- Java 实现快速排序算法
- 快速排序算法java实现
- java实现快速排序算法
- cms系统安装教程
- 装饰模式(Decorator)
- uva 10801 Lift Hopping(dijkstra)
- Min Stack
- poj 1144求割点个数
- Java实现快速排序算法
- 类jquery选择器
- JAVA自学路径
- 推荐系统一 :Facebook如何向十亿人推荐东西
- JSON数据解析
- 80端口被屏蔽怎么办
- C#类的升华
- 回声服务器和客户端的实现
- Odoo进销存(采购、销售、仓库)入门教程 - 下