int i = 0;       //i的初始位置
int j = arr1.length - 1;    //j的初始位置
while(i != j){      //当i与j不指向一个位置的时候
  if(i < j){         //当i<j时,当arr1[i]>arr1[j]交换arr1[i],arr1[j]的值
    if(arr1[i] > arr1[j]) {
      int tmp1 = arr1[i];
      arr1[i] = arr1[j];
      arr1[j] = tmp1;
      int tmp2 = i;      //i换到j的位置,j换到i+1的位置 
      i = j;
      j = tmp2 + 1;
    }else {
      j--;         //如果arr[i]>arr[j],j向前移动一个位置
    }
  }.....
.....
.....
比如说数组{49, 38, 65, 97, 76, 13, 27}
上面程序
已经排出{27,38,13,49,76,97,65}
然后在讲前面三个数快排,后三个数快排,怎么写代码?
这个快排解释是我在百度上搜的。

解决方案 »

  1.   

    只讲下思路  ,就拿你的数据举例
    设arr1[0]为关键字key,拿key=49与最后一个比较也就是27比,如果比key小就交换位置比后的数列 为 27 38 65 97 76 13 49
    这i++ 拿49与 arr1[1]=38比 49 38<key
     27 38 65 97 76 13 49i++ arr1[2]=65  65>key 交换位置
    27 38 49 97 76 13 65key 与13比 key>13 交换位置
    27 38 13 97 76 49 65key与97比 key<97 交换位置
    27 38 13 49 76 97 65再依次递归 做  ~~~~主要的代码是:
                       void quickSort(int low, int high)
    {
    int pivotpos;
    if(low<high)
    {
    pivotpos = partition(low,high);
    quickSort(low,pivotpos-1);
    quickSort(pivotpos+1,high);
    }
    } int partition(int low, int high)
    {
    int p = b[low];
    while(low<high)
    {
    while(low<high&&b[high]>=p)
    high--;
    if(low<high)
    b[low++]=b[high];
    while(low<high&&b[low]<=p)
    low++;
    if(low<high)
    b[high--]=b[low];
    }
    b[low] = p;
    return low;
    }