![](/img/trans.png)
[英]One QuickSort algorithm, many ways to choose a pivot and as many problems with it
[英]Quicksort Algorithm with one function
public static void sort(int[] a){
if (a.length>1){
int pivot=a[a.length-1];
int left=0;
int right=a.length-1;
while(left<=right){
while(a[left]<pivot)
left++;
while(a[right]>pivot)
right--;
if(left<=right){
int tmp=a[right];
a[right]=a[left];
a[left]=tmp;
left++;
right--;
}
}
int[] tmp1=new int[right];
for(int i=0;i<tmp1.length;i++)
tmp1[i]=a[i];
int[] tmp2=new int[a.length-right-1];
for(int i=left;i<a.length;i++)
tmp2[i-left]=a[i];
sort(tmp1);
sort(tmp2);
}
}
我試圖用一種功能編寫一種快速排序算法,但它不起作用。 任何幫助都表示感謝。 謝謝
編輯:我解決了它,謝謝大家的投入。
我認為問題在於,最后您沒有使用tmp1
和tmp2
來符合新數組a
...這是一種在不創建其他數組的情況下進行操作的方法:
public static void sort(int[] a, int left, int right){
if (left < right){
int pivot = a[right];
int pos = left - 1;
for (int i = left; i < right; i++)
if (a[i] <= pivot)
Swap(a, ++pos, i);
Swap(a, pos + 1, right);
sort(a, left, pos);
sort(a, pos + 1, right);
}
}
public static void Swap(int[] a, int i, int j){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
sort的第一個調用必須是sort(a, 0, a.length - 1)
我希望這可以幫助你
與大多數int排序方法相比,您的排序方法似乎極為有用。 這是一個快速簡便的方法。
public static void sort(int[] intArray){
int n = intArray.length;
int temp = 0;
for(int i=0; i < n; i++){
for(int j=1; j < (n-i); j++){
if(intArray[j-1] > intArray[j]){
temp = intArray[j-1];
intArray[j-1] = intArray[j];
intArray[j] = temp;
}
}
}
}
這只是一個泡沫排序。 我看不到遞歸的意義。 還有許多其他類型的排序,但是對於較短的數組長度,這是最簡單的(IMO)。 查找其他人,這很酷,他們在做什么( 排序算法 )。
要回答您的問題...。就像@RobinCurbelo所說,您沒有正確使用temp1
和temp2
。 您的想法在那里,但我認為您在考慮要做的事情太多了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.