半条命16吧 关注:393贴子:26,042
  • 2回复贴,共1
//快速排序(递归版)
void QSort(int* a,int left,int right)
{
int tmp = a[left];
int p = left;
int i = left,j = right;
while(i<=j)
{
//升序
{
while(a[j]>=tmp && j>=p)
j--;
if(j>=p)
{
a[p] = a[j]; //比划分元小的交换到左边
p = j;
}
while(a[i]<=tmp && i<=p)
i++;
if(i<=p)
{
a[p] = a[i]; //比划分元大的交换到右边
p = i;
}
}
//降序
{
while(a[j]<=tmp && j>=p)
j--;
if(j>=p)
{
a[p] = a[j]; //比划分元大的交换到左边
p = j;
}
while(a[i]>=tmp && i<=p)
i++;
if(i<=p)
{
a[p] = a[i]; //比划分元小的交换到右边
p = i;
}
}
}
a[p] = tmp;
if(p-left>1)
QSort(a,left,p-1);
if(right-p>1)
QSort(a,p+1,right);
}
//快速排序(非递归版)
int Partition(int* a,int left,int right)
{
int pivot = a[right];
while(left<right)
{
//升序
{
while(a[left]<pivot && left<right)
left++;
if(left<right)
a[right--] = a[left];
while(a[right]>pivot && left<right)
right--;
if(left<right)
a[left++] = a[right];
}
//降序
{
while(a[left]>pivot && left<right)
left++;
if(left<right)
a[right--] = a[left];
while(a[right]<pivot && left<right)
right--;
if(left<right)
a[left++] = a[right];
}
}
a[left] = pivot;
return left;
}


IP属地:河南1楼2021-06-18 12:13回复
    package com.Aperture.java;
    import java.util.Scanner;
    import java.util.Arrays;
    import java.lang.String;
    public class Manybugs {
    public static void SwapArr(int arr[],int a,int b){
    int temp=arr[a];
    arr[a]=arr[b];
    arr[b]=temp;
    }
    public static void Qsort(int[] arr,int l,int r){//l=1,r=arr.length
    if(l>=r) return;
    int k=arr[l];
    int i=l,j=r;
    while(i!=j&&i<j){
    while (i<j&&arr[j]>=k)
    j--;
    SwapArr(arr,i,j);
    while (i<j&&arr[i]<=k)
    i++;
    SwapArr(arr,i,j);
    }
    Qsort(arr,l,i-1);
    Qsort(arr,i+1,r);
    }
    public static void main(String[] args) {
    int[] arr={2,6,3,5,9,12,7,8,4};
    System.out.println(Arrays.toString(arr));
    Qsort(arr,0,arr.length-1);
    System.out.println(Arrays.toString(arr));
    }
    }


    IP属地:河南2楼2021-07-14 12:38
    回复
      public static void Qsort(int[] arr,int l,int r){//l=1,r=arr.length
      if(l>=r) return;
      int pivot=arr[l];
      int i=l,j=r;
      while(i!=j){
      while (i<j&&arr[j]>=pivot)
      j--;
      SwapArr(arr,i,j);
      while (i<j&&arr[i]<=pivot)
      i++;
      SwapArr(arr,i,j);
      }
      Qsort(arr,l,i-1);
      Qsort(arr,i+1,r);
      }


      IP属地:河南3楼2021-07-14 12:43
      回复