java快速排序代码递归 快速排序非递归java
关于JAVA快速排序算法问题,请大神指教啊!!!
//我按着你的思路写的,自己看看吧,我运行过,结果正确
创新互联是一家集网站建设,砚山企业网站建设,砚山品牌网站建设,网站定制,砚山网站建设报价,网络营销,网络优化,砚山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
public class QuickSort {
public static void main(String[] args) {
int[] array = new int[]{2,5,3,8,7,0,1,4,6,9,10};
int left = 0;
int right = array.length-1;
qsort(array,left,right);
for(int index:array){
System.out.print(index+" ");
}
}
public static void qsort(int[] array,int left,int right){
int p;
if(leftright){
p = partition(array,left,right);
qsort(array,left,p-1);
qsort(array,p+1,right);
}
}
public static int partition(int[] arr,int left,int right){
int temp_val;
int temp_r, temp_l, temp_m;
temp_r = right;
temp_l = left;
temp_m = left;
boolean flag = true;
while(temp_l temp_r){
if(flag){
if(arr[temp_m] arr[temp_r]){
temp_val = arr[temp_m];
arr[temp_m] = arr[temp_r];
arr[temp_r] = temp_val;
temp_m = temp_r;
flag = false;
}
temp_r --;
}else{
if(arr[temp_m] arr[temp_l]){
temp_val = arr[temp_m];
arr[temp_m] = arr[temp_l];
arr[temp_l] = temp_val;
temp_m = temp_l;
flag = true;
}
temp_l ++;
}
}
return temp_m;
}
}
举一个简单java快速排序的例子?
Java中的快速排序一个简单的例子
public class QuickSort {
public static void sort(Comparable[] data, int low, int high) {
// 枢纽元,一般以第一个元素为基准进行划分
Comparable pivotKey = data[low];
// 进行扫描的指针i,j;i从左边开始,j从右边开始
int i = low;
int j = high;
if (low high) {
// 从数组两端交替地向中间扫描
while (i j) {
while (i j data[j].compareTo(pivotKey) 0) {
j--; }
// end while
if (i j) {
// 比枢纽元素小的移动到左边
data[i] = data[j];
i++;
}
// end if
while (i j data[i].compareTo(pivotKey) 0) {
i++;
}
// end while
if (i j) {
// 比枢纽元素大的移动到右边
data[j] = data[i];
j--;
}
// end if
}
// end while
// 枢纽元素移动到正确位置
data[i] = pivotKey;
// 前半个子表递归排序
sort(data, low, i - 1);
// 后半个子表递归排序
sort(data, i + 1, high);
}
// end if
}
// end sort
public static void main(String[] args) {
// 在JDK1.5版本以上,基本数据类型可以自动装箱
// int,double等基本类型的包装类已实现了Comparable接口
Comparable[] c = { 4, 9, 23, 1, 45, 27, 5, 2 };
sort(c, 0, c.length - 1);
for (Comparable data : c) {
System.out.println(data);
}
}
}
真的是很服你,你把这个新建一个类放里面
在主方法里面这样写:
自己建个数组Comparable[] data,
定义参数int low, int high
QuickSort qs = new QuickSort();
qs.sort([] data, low, high);
请问一下java快速排序源代码
快速排序:
package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;
/**
* @author treeroot
* @since 2006-2-2
* @version 1.0
*/
public class QuickSort implements SortUtil.Sort{
/* (non-Javadoc)
* @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
*/
public void sort(int[] data) {
quickSort(data,0,data.length-1);
}
private void quickSort(int[] data,int i,int j){
int pivotIndex=(i+j)/2;
//swap
SortUtil.swap(data,pivotIndex,j);
int k=partition(data,i-1,j,data[j]);
SortUtil.swap(data,k,j);
if((k-i)1) quickSort(data,i,k-1);
if((j-k)1) quickSort(data,k+1,j);
}
/**
* @param data
* @param i
* @param j
* @return
*/
private int partition(int[] data, int l, int r,int pivot) {
do{
while(data[++l]pivot);
while((r!=0)data[--r]pivot);
SortUtil.swap(data,l,r);
}
while(lr);
SortUtil.swap(data,l,r);
return l;
}
}
改进后的快速排序:
package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;
/**
* @author treeroot
* @since 2006-2-2
* @version 1.0
*/
public class ImprovedQuickSort implements SortUtil.Sort {
private static int MAX_STACK_SIZE=4096;
private static int THRESHOLD=10;
/* (non-Javadoc)
* @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
*/
public void sort(int[] data) {
int[] stack=new int[MAX_STACK_SIZE];
int top=-1;
int pivot;
int pivotIndex,l,r;
stack[++top]=0;
stack[++top]=data.length-1;
while(top0){
int j=stack[top--];
int i=stack[top--];
pivotIndex=(i+j)/2;
pivot=data[pivotIndex];
SortUtil.swap(data,pivotIndex,j);
//partition
l=i-1;
r=j;
do{
while(data[++l]pivot);
while((r!=0)(data[--r]pivot));
SortUtil.swap(data,l,r);
}
while(lr);
SortUtil.swap(data,l,r);
SortUtil.swap(data,l,j);
if((l-i)THRESHOLD){
stack[++top]=i;
stack[++top]=l-1;
}
if((j-l)THRESHOLD){
stack[++top]=l+1;
stack[++top]=j;
}
}
//new InsertSort().sort(data);
insertSort(data);
}
/**
* @param data
*/
private void insertSort(int[] data) {
int temp;
for(int i=1;idata.length;i++){
for(int j=i;(j0)(data[j]data[j-1]);j--){
SortUtil.swap(data,j,j-1);
}
}
}
}
文章标题:java快速排序代码递归 快速排序非递归java
当前地址:http://scjbc.cn/article/dooeojo.html