java快速排序,java排序
//快速排序思想:選擇數組最後一個數(key),比它小的排他前面 ( key放中間 ) 比它大的排後面, 然後遞迴 終止條件(數組只有一個數)public class Sort<T extends Comparable<T>> { //能排序的都是能比較的,所以必須繼承java.lang.Comparablepublic void quick(T[] array){sort(array,0,array.length-1);}private void sort(T[] array ,int left,int right){ if(left<right){int p=partition(array,left,right); sort(array,left,p-1);sort(array,p+1,right);}}private int partition(T[] array,int left,int right){int i=left-1;for(int j=left;j<right;j++){if(array[j].compareTo(array[right])<=0) {i++; // 理解 int i=left-1 和 return i+1; 細節細節!!!需要自己體會swap(array,i,j);}}swap(array,i+1,right); // 把key 插入return i+1;}private void swap(T[] array, int i,int j){T t=array[i];array[i]=array[j];array[j]=t;}}
用JAVA實現快速排序演算法?
本人特地給你編的代碼
親測
public class QuickSort {
public static int Partition(int a[],int p,int r){
int x=a[r-1];
int i=p-1;
int temp;
for(int j=p;j<=r-1;j++){
if(a[j-1]<=x){
// swap(a[j-1],a[i-1]);
i++;
temp=a[j-1];
a[j-1]=a[i-1];
a[i-1]=temp;
}
}
//swap(a[r-1,a[i+1-1]);
temp=a[r-1];
a[r-1]=a[i+1-1];
a[i+1-1]=temp;
return i+1;
}
public static void QuickSort(int a[],int p,int r){
if(p<r){
int q=Partition(a,p,r);
QuickSort(a,p,q-1);
QuickSort(a,q+1,r);
}
}
public static void main(String[] stra){
int a[]={23,53,77,36,84,76,93,13,45,23};
QuickSort(a,1,10);
for (int i=1;i<=10;i++)
System.out.println(a[i-1]);
}
}
java快速排序問題
幫你改了一下:
public class Point{
public static void main(String[] args) {
int[] a = {4,63,2,4,4,6,43,2,3};
quickSort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + ",");
}
}
static int Partition(int[] a, int left, int right)
{
int tmp;
//進行一趟快速排序,返回中心記錄位置
int pivot = a[left];//把中心置於a[0]
while (left < right)
{
while(left<right && a[right]>=pivot)
right--;
//將比中心記錄小的移到低端
tmp = a[right];
a[right] = a[left];
a[left] = tmp;
while(left<right && a[left]<=pivot)
left++;
tmp = a[right];
a[right] = a[left];
a[left] = tmp;
//將比中心記錄大的移到高端
}
a[left] = pivot; //中心移到正確位置
return left; //返回中心位置
}
public static void quickSort(int[] a, int left, int right) {
if(left >= right - 1)
return;
int pivot = Partition(a,left,right);
quickSort(a, left, pivot-1);
quickSort(a, pivot+1, right);
}
}