Java快速排序
来源:互联网 发布:电梯运行优化 编辑:程序博客网 时间:2024/06/14 20:04
package sort;
/**
* 快速排序
* @author LTF
*
*/
public class FastSort2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义一个数组
int [] a = {9,5,6,18,7,4,45,52,33,12,5,3};
//定义开始的下标
int start = 0;
//定义最后一个数的下标
int end = a.length-1;
//执行快排的方法
sort(a, start, end);
//遍历输出
for (int i : a) {
System.out.print(i+" ");
}
}
/**
* 快速排序的方法
* 比基准数大的放在基准数的右边
* 比基准数小的放在基准数的前边
* @param a
* @param left
* @param right
*/
public static void sort(int a[],int left ,int right){
//开始的下标
int start = left;
//最后的下标
int end = right;
//基准数(第一个数)
//如果选取第一个数为基准数那就从后往前先比较
//如果选取最后一个数为基准数那就从前往后先比较
int key = a[left];
//判断最后一个下标和第一个下标是否重合
while(end > start){
//从后往前比较
//如果最后的数比基准数大就是正确的,然后比较倒数第二个,以此类推
//如果比基准数小了,那就需要位置调换
while(end > start && a[end] >= key){
end--;
}
//从后往前的数比基准数小了;进行位置调换
if (a[end] <= key) {
int temp = a[end];
a[end] = a[start];
a[start] = temp;
}
//从前往后比较
//第一个数小于等于基准数,是正确的,比较下一个,比基准数小就是正确的
//比基准数大,就需要调换位置
while(end > start && a[start] <= key){
start++;
}
//判断比基准数大 需要调换位置
if (a[start] >= key) {
int temp = a[start];
a[start] = a[end];
a[end] = temp;
}
}
//大循环把基准数的位置确定了,比基准数小的在基准数前边,比基准数大的在基准数后边
//把基准数前边的在定义成一个数组,继续比较,进行排序
//当跳出这个大while循环时,start和end是相等的,也就是说这个位置就是基准数的位置
//那这个时候基准数位置已经确定,但是真个数组还没有排序,这时候需要对整个数组进行排序,还是用
//的这个方法进行快速排序
//start是基准数位置,他以前的比基准数都小,那就把基准数左边的看作一个数组,进行快排
//start是基准数的位置,left是从最左边开始,初始值是0,a是数组,从0开始,到基准数减一结束,然后继续快排
if (start > left) {
sort(a, left, start-1);
}
//end也是基准数的位置,right是从最右边开始,也就是最后的一个下标,a是数组,从end+1开始,到最后结束
if (end < right) {
sort(a, end+1, right);
}
}
}
/**
* 快速排序
* @author LTF
*
*/
public class FastSort2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义一个数组
int [] a = {9,5,6,18,7,4,45,52,33,12,5,3};
//定义开始的下标
int start = 0;
//定义最后一个数的下标
int end = a.length-1;
//执行快排的方法
sort(a, start, end);
//遍历输出
for (int i : a) {
System.out.print(i+" ");
}
}
/**
* 快速排序的方法
* 比基准数大的放在基准数的右边
* 比基准数小的放在基准数的前边
* @param a
* @param left
* @param right
*/
public static void sort(int a[],int left ,int right){
//开始的下标
int start = left;
//最后的下标
int end = right;
//基准数(第一个数)
//如果选取第一个数为基准数那就从后往前先比较
//如果选取最后一个数为基准数那就从前往后先比较
int key = a[left];
//判断最后一个下标和第一个下标是否重合
while(end > start){
//从后往前比较
//如果最后的数比基准数大就是正确的,然后比较倒数第二个,以此类推
//如果比基准数小了,那就需要位置调换
while(end > start && a[end] >= key){
end--;
}
//从后往前的数比基准数小了;进行位置调换
if (a[end] <= key) {
int temp = a[end];
a[end] = a[start];
a[start] = temp;
}
//从前往后比较
//第一个数小于等于基准数,是正确的,比较下一个,比基准数小就是正确的
//比基准数大,就需要调换位置
while(end > start && a[start] <= key){
start++;
}
//判断比基准数大 需要调换位置
if (a[start] >= key) {
int temp = a[start];
a[start] = a[end];
a[end] = temp;
}
}
//大循环把基准数的位置确定了,比基准数小的在基准数前边,比基准数大的在基准数后边
//把基准数前边的在定义成一个数组,继续比较,进行排序
//当跳出这个大while循环时,start和end是相等的,也就是说这个位置就是基准数的位置
//那这个时候基准数位置已经确定,但是真个数组还没有排序,这时候需要对整个数组进行排序,还是用
//的这个方法进行快速排序
//start是基准数位置,他以前的比基准数都小,那就把基准数左边的看作一个数组,进行快排
//start是基准数的位置,left是从最左边开始,初始值是0,a是数组,从0开始,到基准数减一结束,然后继续快排
if (start > left) {
sort(a, left, start-1);
}
//end也是基准数的位置,right是从最右边开始,也就是最后的一个下标,a是数组,从end+1开始,到最后结束
if (end < right) {
sort(a, end+1, right);
}
}
}
阅读全文
0 0
- 排序-快速排序-Java
- java排序之快速排序
- Java排序算法 快速排序
- 快速排序(java排序)
- java 快速排序,冒泡排序
- 算法:排序----Java快速排序
- 【交换排序】快速排序--Java
- java 插入排序+快速排序
- Java 排序之 快速排序
- java排序之快速排序
- Java排序算法:快速排序
- Java排序-快速排序
- Java排序算法:快速排序
- Java排序算法--》快速排序
- JAVA排序算法---快速排序
- Java 快速排序 归并排序
- Java排序算法--快速排序
- java 冒泡排序、快速排序
- Inno Setup入门(五)——添加readme文件
- JAVA_int类型数据精度高于float低于double
- 下面总结 8 组常用的Eclipse快捷键
- Java发送邮件的简单实现
- kickstart无人值守安装
- Java快速排序
- Java设计模式-工厂模式
- nginx windows rtmp 服务器搭建
- android系统6.0权限
- 关于APPCAN的UI基础框架的定义,说明,场景和例子
- java之静态导入
- Android网络连接的判断
- python Beautiful soup网页解析-星座网
- Parallel.Invoke 基本使用