十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
您好,按照你现在的程序你编译后的结果应该是数组里面的数字,大的都到了右边,小的都到了左边,但是右边大的和左边小的并没有进一步排序,问题就在于
十年的威海网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整威海建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“威海网站设计”,“威海网站推广”以来,每个客户项目都认真落实执行。
你的这部分代码根本就没有用的,在main方法里面没有调用,在patition方法中也没有调用,导致这部分代码就没有使用,所以也不可能完成递归,对左右两边的数字没有办法进一步排序,希望对你有用。
快速排序:
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);
}
}
}
}
/**
* 快速排序
*/
private static void quickSort ( int[] array, int start, int end )
{
if (start end)
{
int key = array;
int i = start;
for ( int j = start + 1; j end + 1; j++ )
{
if (key array[j])
{
int temp = array[j];
array[j] = array[i + 1];
array[i + 1] = temp;
i++;
}
}
array = array[i];
array[i] = key;
quickSort (array, start, i - 1);
quickSort (array, i + 1, end);
}
}
int[] array = new int[] { 11, 213, 134, 65, 77, 78, 23, 43 };
quickSort (array, 0, array.length - 1);
System.out.println (Arrays.toString (array));
把int key=num;这句移到while(true)循环前,也就是把int key=num;在ab的情况下执行,这样这个快速排序Java程序就没问题了.
完整的Java快速排序程序如下(改动的地方见注释)
public class A {
public void quickSort(int[] num,int start,int end) {
int a = start;
int b = end;
if(ab){
return;
}
int key=num;//把这句移到这里
while(true){
while(ba){
if(num[b]key){
int temp;
temp=num[a];
num[a]=num[b];
num[b]=temp;
break;
}else
b--;
}
while(ba)
{
if(keynum[a]){
int temp;
temp=num[a];
num[a]=num[b];
num[b]=temp;
break;
}else
a++;
}
if(a==b)
break;
}
quickSort(num,start,a-1);
quickSort(num,a+1,end);
}
public static void main(String[] args) {
int[] a={34,54,54,32,54,756,123,22,11,55,7};
A e=new A();
e.quickSort(a,0,a.length-1);
for(int w=0;wa.length;w++){
System.out.println(a[w]);
}
}
}
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);
① 代码:
public class quicksortdemo {
private int array[];
private int length;
public void sort(int[] inputArr) {
if (inputArr == null || inputArr.length == 0) {
return;
}
this.array = inputArr;
length = inputArr.length;
quickSort(0, length - 1);
}
private void quickSort(int lowerIndex, int higherIndex) {
int i = lowerIndex;
int j = higherIndex;
// calculate pivot number
int pivot = array[lowerIndex+(higherIndex-lowerIndex)/2];
// Divide into two arrays
while (i = j) {
while (array[i] pivot) {
i++;
}
while (array[j] pivot) {
j--;
}
if (i = j) {
swap(i, j);
i++;
j--;
}
}
// call quickSort() method recursively
if (lowerIndex j)
quickSort(lowerIndex, j);
if (i higherIndex)
quickSort(i, higherIndex);
}
private void swap(int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String a[]){
quicksortdemo sorter = new quicksortdemo();
int[] input = {24,2,45,20,56,75,2,56,99,53,12};
sorter.sort(input);
for(int i:input){
System.out.print(i);
System.out.print(" ");
}
}
}
② 运行:
c:\java quicksortdemo
2 2 12 20 24 45 53 56 56 75 99