在研究快速排序。 
用这样的思路: 
    1)设置两个变量I、J,排序开始的时候:I=1,J=N-1; 
  2)以第一个数组元素作为关键数据,赋值给X,即 X=A[0]; 
  3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于X的值,让该值与X交换; 
  4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于X的值,让该值与X交换; 
  5)重复第3、4步,直到 I=J; 下面是菜鸟的代码
public void quickSort(int[] src){
int len = src.length;
int left = 1;
int right = len - 1;
int keyElement = src[0];
int saveKeyElement = keyElement;
//49 38 65 97 76 13 27 
for(int i = right;i> -1;i--){
int temp;
int smaller = src[i];
if(smaller < keyElement){
temp = smaller;
smaller = keyElement;
keyElement = temp;
src[i] = smaller;
src[0] = temp;
right = i;
break;
}
}
keyElement = src[right];
for(int j = left;j<len;j++){
int temp;
int bigger = src[j];
if(bigger > keyElement){
temp = bigger;
bigger = keyElement;
keyElement = temp;
src[j] = bigger;
src[right] = temp;
left = j;
break;
}
}
 

}
我已经完成了一次快速排序,下面要递归了。请问应该如何处理。
因为第二次开始的时候要考虑keyElement的位置。不是第一次的src[0]的值了。应该是src[left]的值
所以这里有点问题 谢谢高手

解决方案 »

  1.   

    LZ 你的思路好像错了!快速排序是以一段区间为操作空间!以区间中的某一元素为标准元素,分别从前后开始比较. 从前向后比较的目的是找到比标准元素小的!从后向前比较的目的是找到比标准元素大的! 
    都找到后,让被找到的2个元素调换位置! 然后继续比较!知道2次比较相遇!结果是,以相遇的那个位置为基准,前面的都是大的,后面的都是小的!这样,一个区间就分为2个区间,再次调用本方法!递归下去!
    你的方法写错了!参数有3个!(int[] array , int beginIndex , int endIndex)
      

  2.   

    我直接给你一个算了 public static void qsort(int[] data, int left, int right) {
    int l = left;
    int r = right;
    int m = data[left]; while (true) {
    while (data[l] < m) {
    l++;
    }
    while (data[r] > m) {
    r--;
    }
    if (l < r) {
    int temp = data[l];
    data[l] = data[r];
    data[r] = temp;
    l++;
    r--;
    } else {
    break;
    }
    } if (left < r) {
    qsort(data, left, l - 1);
    }
    if (right > l) {
    qsort(data, r + 1, right);
    }
    } // 用户接口
    public static void qsort(int[] a) {
    qsort(a, 0, a.length - 1);
    } public static void main(String[] args) throws Exception {
    Random r = new Random();
    int[] data = new int[100];
    for (int i = 0; i < data.length; i++) {
    data[i] = r.nextInt(100);
    } Sort.qsort(data); for (int i = 0; i < data.length; i++) {
    System.out.println(data[i] + " ");
    }
    }
      

  3.   

    额……lz昨天的快速排序还没排好么………………我也来帖一下代码吧,是从lz昨天代码改的,不过改得似乎认不出了……
    本来昨天想发的,不过觉得还是自己做好,现在有人发了那么我也帖下public void quickSort(int[] src, int left, int right) {
    int i = left, j = right;
    if (right - left <= 1)
    return;
    for (int ctrl = 0; i < j;) {
    if (src[i] > src[j]) {
    int temp;
    temp = src[i];
    src[i] = src[j];
    src[j] = temp;
    ctrl = 1 - ctrl;
    }
    i += ctrl;
    j -= 1 - ctrl;
    }
    quickSort(src, left, i - 1);
    quickSort(src, j + 1, right);
    }