这是合并排序,运行之后输入类似2 3 4 1 6 5这样的数组,结果只对2 3进行排序求教。。。。。。
package mergeArray;
import java.util.Scanner;
public class MergeArray {
private static Scanner in;
private static Scanner in1;
public static void main(String[] args) {
// TODO
System.out.println("请输入待排序数据,以空格隔开");
in = new Scanner(System.in);
int l=in.nextInt();
int[] a=new int[l];
System.out.println("待排序数据");
in1 = new Scanner(System.in);
int i;
for(i=0;i<l;i++) {
a[i]=in1.nextInt();
}
mergeSort(a,0,l-1);
printCp(a,0,l-1);
}
public static void printCp(int a[],int A,int B) {
int i;
for(i=A;i<=B;i++) {
System.out.print(a[i]+" ");
}
}
public static void merge(int a[],int b[],int left,int i,int right) {
System.out.print("合并");
printCp(a,left,i);
System.out.print("和 ");
printCp(a,i+1,right);
System.out.print("\r\n");
int x=left;
int y=i+1;
int z=0;
while(x<=i&&y<=right) {
if(a[x]<a[y]) {b[z++]=a[x++];}
else { b[z++]=a[y++];}
}
while(x<=i) {
b[z++]=a[x++];
}
while(y<=right) {
b[z++]=a[y++];
}
}
public static void copy(int a[],int b[],int left,int right) {
int i=0;
int x=left;
while(x<=right) {
a[x++]=b[i++];
}
}
public static void mergeSort(int a[],int left,int right) {
if(left<right) {
int i=(left+right)/2;
mergeSort(a,left,i);
mergeSort(a,i+1,right);
int[] b=new int[a.length];
merge(a,b,left,i,right);
copy(a,b,left,right);
}
}
}
下面的是快速排序,应该是类似的问题,输入数组后,只对前面的两个数进行排序
package quicksort;
import java.util.Scanner;
public class QuickSort {
private static Scanner in;
private static Scanner in1;
public static void printCp(int a[],int A,int B) {
int i;
for(i=A;i<=B;i++) {
System.out.print(a[i]+" ");
}
System.out.print("\r\n");
}
public static int partition(int a[],int left,int right) {
int p=(int)(left+Math.random()*right);
System.out.println("排序范围:");
printCp(a,left,right);
System.out.println("基准元素:"+a[p]);
int b[]=new int[right-left+1];
int b_left=0,b_right=b.length-1;
int j=0;
for(int i=0;i<=right-left;i++) {
if(a[left+i]==a[p]&&j!=1) {
j=1;
continue;
}
if(a[left+i]<=a[p]) {
b[b_left]=a[left+i];
b_left++;
}
else {
b[b_right]=a[left+i];
b_right--;
}
}
b[b_left]=a[p];
int i=0;
int x=left;
while(x<=right) {
a[x++]=b[i++];
}
System.out.println("排序后:");
printCp(a,left,right);
System.out.print("\r\n");
return left+b_left;
}
public static void qSort(int a[],int left,int right) {
if(left<right) {
int q=partition(a,left,right);
qSort(a,left,q-1);
qSort(a,q+1,right);
}
}
public static void main(String[] args) {
// TODO
System.out.println("请输入待排序数据,以空格隔开:");
in = new Scanner(System.in);
int l=in.nextInt();
int[] a=new int[l];
System.out.println("待排序数据:");
in1 = new Scanner(System.in);
int i;
for(i=0;i<l;i++) {
a[i]=in1.nextInt();
}
qSort(a,0,l-1);
System.out.println("完成排序后数据:");
printCp(a,0,l-1);
}
}