快速排序java实现
来源:互联网 发布:华娱无线java 编辑:程序博客网 时间:2024/06/15 03:41
package com.imooc.test;
//main函数,测试用
public static void main(String[] args) {
QuickSort qs = new QuickSort();
int[] a = {12,20,5,16,15,1,30,45,23,9,36,2,6,7};
qs.sort(a);
for (int i : a) {
System.out.print(i+" ");
}
}
//预处理方法
public void sort(int[] a){
int n = a.length;
quickSort(a, 0, n-1);
}
//快速排序
public void quickSort(int[] a ,int left,int right){
int position = partition(a,left,right);
//递归
if (left<position) {//递归结束条件
quickSort(a, left, position-1);
}
if (right>position) {
quickSort(a, position+1, right);
}
}
/**采用分治法、冒泡排序的思想,以数组第一个数为基准数,先从右边扫描,遇到小于基准数的,交换两个数的值,
* 再从左边扫描,遇到大于基准数的交换数值。最终结果使得基准数(位置变动)左边的数(未排序)都小于它,
* 右边的数(未排序)都大于它,最后返回基准数的位置(下标)。
*
* @param a 待排序数组
* @param left 起始点
* @param right 结束点
* @return 返回分割点的位置i,位于分割点左边的数都小于a[i],右边的都大于a[i]
*/
private int partition(int[] a, int left, int right) {
int i= left;//开始指针
int j= right;//结束指针
int key = a[left];//取开始的数为基准值,与其他数进行比较
while(i<j){
/*排序的目的是为了使数组成为这样的形式,a[i]<key<a[j]
*但当有a[i]>key或key>a[j]时,要交换他们的值
*所以扫描的时候遇到满足a[i]<key<a[j]这样的数时,并不是排序所关心
*应当移动指针,直到找到a[i]>key或key>a[j]这样的数,
*并交换a[i],key或key,a[j]的值
*
* */
while(i<j && key<a[j]){//先从右边扫描 key<a[j]
j--; //这是正常排序的情况,忽略,并使指针左移
}
if (key>a[j]) {//当发现右边有数比基准数小时,交换它和基准数的值,
swap(a, i, j);
}
while(i<j&&a[i]<=key){//左边开始扫描
i++;
}
if (a[i]>key) {
swap(a,i,j);
}
//右边和左边各扫描一次结束
}
return i;//整个扫描结束,i=j
}
private void swap(int[] a, int i, int j) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
0 0
- java实现快速排序
- 快速排序Java实现
- 快速排序java实现
- 快速排序JAVA实现
- Java实现快速排序
- 快速排序--Java实现
- 快速排序java实现
- java实现快速排序
- java实现快速排序
- Java实现快速排序
- Java实现快速排序
- 快速排序java实现
- 快速排序Java实现
- Java实现快速排序
- java快速排序实现
- JAVA实现快速排序
- java实现快速排序
- java 实现快速排序
- ActiveMQ CentOS集群安装部署
- 与同事闲谈中,有哪些语言陷阱应该格外注意?如何应对?
- Gas Station
- HDOJ 2018 母牛的故事 递归调用法解决
- Brackets 编辑器 12 个有用的扩展插件
- 快速排序java实现
- Windows下Mongodb安装及配置
- 石头剪刀布
- 场景切换问题:如何切换到已经打开的场景
- shuoj_1559
- RFID实验二总结
- redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
- 在JavaScript中使用document.getElementById()获取对象失败的原因
- Docker可视化管理工具Shipyard安装与配置