为什么JAVA快排递归中:
quickSort(A,l,i-1);(这个i要减1)
quickSort(A,i+1,r);
而C语言的快排中不需要:
Quick_sort(a,l,i);
Quick_sort(a,i+1,r);
JAVA快排代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class QuickSort {
public static void quickSort(int []A,int l,int r){
if (l>=r)
return;
int x=A[l],i=l,j=r;
while (i<j){
while(i<j&&A[j]>x)
j--;
if(i<j){
A[i]=A[j];
i++;
}
while(i<j&&A[i]<x)
i++;
if(i<j)
{
A[j]=A[i];
j--;
}
A[i]=x;
quickSort(A,l,i-1);
quickSort(A,i+1,r);
}
}
public static void swap(int a,int b){
int temp=a;
a=b;
b=temp;
}
public static void main(String[] args) throws IOException {
BufferedReader bf =new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入数组长度");
int n=Integer.parseInt(bf.readLine( ));
int []A=new int[n];
for (int i = 0; i < A.length; i++) {
A[i]=Integer.parseInt(bf.readLine( ));
}
quickSort(A,0,A.length-1);
for (int i = 0; i < A.length; i++) {
System.out.print(A[i]+" ");
}
}
}
C语言快排代码:
#include <stdio.h>
#include <stdlib.h>
void Quick_sort(int a[],int l,int r)
{
if(l<r)
{
int i=l,j=r,x=a[l];
while(i<j)
{
while(i<j&&a[j]>x)
j--;
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j&&a[i]<x)
i++;
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=x;
Quick_sort(a,l,i);
Quick_sort(a,i+1,r);
}
}
int main()
{
int a[10]={72,6,57,88,60,42,83,73,48,85};
Quick_sort(a,0,9);
int i=0;
for(i;i<10;i++)
printf("%d ",a[i]);
return 0;
}
因为i代表数组的长度(上限),数组的下标是从0开始的,所以要-1.
先把两个代码写一样了吧。
基础的代码所有语言实现都一样,
和java还是c没什么关系
查一下你代码哪里不一样吧。