Java实现的快速排序算法
2016-02-29 10:33
525 查看
快速排序算法是一种比较重要的算法,他可以在O(n)时间复杂度内对一个数组进行排序。
因此掌握快速排序算法是编程者的一项必要机能。
以外大多数的快速排序算法都是有C或者C++实现的。
本文给大家提供一个Java实现快速排序算法的例子。
package com.test;
import java.util.Random;
public class QuickSort {
public int data[];
/**交换数组中两个数的位置
* @param start
* @param des
*/
private void Swap(int start,int des){
int temp;
temp = data[des];
data[des]=data[start];
data[start]= temp;
}
/**从数组中随机抽取一个数,然后把小于这个数的数字放到左边,把大于这个数的数字放到右边,实现一次排序。
* @param length
* @param start
* @param end
* @return
*/
private int Partition(int length,int start,int end){
int small = 0;
int index = 0;
try {
if(data == null || length < 0 || start < 0 || end - start > length){
throw new Exception("Invalid Parameter");
}
//获取随机数
Random ra = new Random();
index = start + (int)ra.nextInt(end - start);
//交换两个数的位置
Swap(index,end);
small=start-1;
//循环数组把小于随机数的数字放到左边,大于随机数的数字放到右边
for(index = start;index < end;++index){
if(data[index] < data[end]){
++ small;
if(small != index){
Swap(index,small);
}
}
}
++small;
Swap(end,small);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("index:" + index + "small:" + small + "end:" + end);
}
return small;
}
/**采用递归的方式实现快速排序算法
* @param length
* @param start
* @param end
*/
public void QuickSortImp(int length,int start,int end){
if(start >= end )
return;
int index = Partition(length,start,end);
if(index > start){
QuickSortImp(length,start,index -1);
}
if(end > index){
QuickSortImp(length,index + 1,end);
}
}
}
快速排序算法是一种比较重要的算法,他可以在O(n)时间复杂度内对一个数组进行排序。
因此掌握快速排序算法是编程者的一项必要机能。
以外大多数的快速排序算法都是有C或者C++实现的。
本文给大家提供一个Java实现快速排序算法的例子。
package com.test;
import java.util.Random;
public class QuickSort {
public int data[];
/**交换数组中两个数的位置
* @param start
* @param des
*/
private void Swap(int start,int des){
int temp;
temp = data[des];
data[des]=data[start];
data[start]= temp;
}
/**从数组中随机抽取一个数,然后把小于这个数的数字放到左边,把大于这个数的数字放到右边,实现一次排序。
* @param length
* @param start
* @param end
* @return
*/
private int Partition(int length,int start,int end){
int small = 0;
int index = 0;
try {
if(data == null || length < 0 || start < 0 || end - start > length){
throw new Exception("Invalid Parameter");
}
//获取随机数
Random ra = new Random();
index = start + (int)ra.nextInt(end - start);
//交换两个数的位置
Swap(index,end);
small=start-1;
//循环数组把小于随机数的数字放到左边,大于随机数的数字放到右边
for(index = start;index < end;++index){
if(data[index] < data[end]){
++ small;
if(small != index){
Swap(index,small);
}
}
}
++small;
Swap(end,small);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("index:" + index + "small:" + small + "end:" + end);
}
return small;
}
/**采用递归的方式实现快速排序算法
* @param length
* @param start
* @param end
*/
public void QuickSortImp(int length,int start,int end){
if(start >= end )
return;
int index = Partition(length,start,end);
if(index > start){
QuickSortImp(length,start,index -1);
}
if(end > index){
QuickSortImp(length,index + 1,end);
}
}
}
相关文章推荐
- Struts2、SpringMVC、Servlet(Jsp)性能对比 测试
- Java中equals与==的用法
- 学习Java多线程之volatile域
- 【慕课笔记】第五章 JAVA中的集合框架(中) 第4节 学生选课——修改Map中的学生
- Java张孝祥视频 学习笔记 代理
- JAVA中的内省
- 【leetcode】【29】Divide Two Integers
- Java中如何遍历Map对象的4种方法
- AmaterasUML是个人觉得最好用的Eclipse UML插件
- Java设计模式
- JAVA堆和栈
- 学习Java多线程之同步
- 前台extjs后台 java poi 读取excel数据到数据库中
- 深入理解Java的接口和抽象类
- Java 回顾笔记8内部类
- 【leetcode】【28】Implement strStr()
- Java执行定时任务的方法(Timer、ScheduledExecutorService)
- Java 学习笔记 ------第五章 对象封装
- Java中的继承、封装、多态、抽象
- windows环境下如何安装jdk