以下代码均可直接实现,如有异议,欢迎提出意见
* 归并排序
*
*/
public class GBsort {
static int market;
public static void main(String []args){
int []a={3,5,2,6,1,20,-2};
Meragesort(a,0,6);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
private static void Meragesort(int[] a, int left, int right) {
int mid=(left+right)/2;
if(left<right){ //至少有两个元素
market++;
System.out.println("正在进行第"+market+"次分割,得到"+" "+left+"-"+mid+","+(mid+1)+"-"+right);
Meragesort(a,left,mid);
Meragesort(a,mid+1,right);
Merage(a,left,right,mid); //合并
}
}
private static void Merage(int[] a, int left, int right, int mid) {
System.out.println("合并"+left+"-"+mid+"和"+(mid+1)+"-"+right);
int []temp=new int[right-left+1];
int i=left; //左指针
int j=mid+1; //右指针
int k=0;
while(i<=mid&&j<=right){
if(a[i]<a[j]){
temp[k++]=a[i++];
}else{
temp[k++]=a[j++];
}
}
while(i<=mid){
temp[k++]=a[i++];
}
while(j<=right){
temp[k++]=a[j++];
}
for(int m=0;m<temp.length;m++){
a[m+left]=temp[m];
}
}
}
其他排序法的实现及二分查找
import java.util.Scanner;
public class Sort{
public static void main(String []args){
Scanner in=new Scanner(System.in);
int N=in.nextInt(); //即将输入的数的个数
in.nextLine();
int n[]=new int[N];
for(int i=0;i<n.length;i++){
n[i]=in.nextInt();
}
/* MP mp=new MP();
mp.sort(n); //冒泡排序
XZ xz=new XZ();
xz.sort(n); //选择排序
Insert insert=new Insert();
insert.sort(n); //插入排序 */
Fast fast=new Fast();
fast.sort(n,0,n.length-1);
for(int i=0;i<n.length;i++){
System.out.print(n[i]+" ");
}
Search find=new Search();
find.find(0,N-1,77,n);
}
}
/**
* 冒泡排序法
*
*/
class MP{
public void sort(int n[]){
for(int i=0;i<n.length-1;i++){
for(int j=0;j<n.length-1-i;j++){
if(n[j]>n[j+1]){
int temp=n[j+1];
n[j+1]=n[j];
n[j]=temp;
}
}
}
for(int i=0;i<n.length;i++){
System.out.print(n[i]+" ");
}
}
}
/**
* 选择排序法
*
*/
class XZ{
public void sort(int n[]){
for(int i=0;i<n.length;i++){
int min=n[i];
int mindex=i;
for(int j=i+1;j<n.length;j++){
if(min>n[j]){
min=n[j];
mindex=j;
} //找到了当i=0时的min
}
int temp=n[i];
n[i]=n[mindex];
n[mindex]=temp;
}
for(int i=0;i<n.length;i++){
System.out.print(n[i]+" ");
}
}
}
/**
* 插入排序法
*
*/
class Insert{
public void sort(int n[]){
for(int i=1;i<n.length;i++){
int insert=n[i];
int index=i-1;
while(index>=0&&n[index]>insert){
n[index+1]=n[index];
index--;
}
n[index+1]=insert;
}
for(int i=0;i<n.length;i++){
System.out.print(n[i]+" ");
}
}
}
/**
* 快速排序法
*
*/
class Fast{
public void sort(int n[], int l, int r) {
if(l<r){
int middle=getMiddle(n,l,r);
sort(n,l,middle-1);
sort(n,middle+1,r);
}
}
private int getMiddle(int[] n, int l, int r) {
int temp=n[l];
while(l<r){
while(l<r&&n[r]>temp){
r--;
}
n[l]=n[r];
while(l<r&&n[l]<temp){
l++;
}
n[r]=n[l];
}
n[l]=temp;
return l;
}
}
/**
* 二分查找
*
*/
class Search{
public void find(int left,int right,int f,int n[]){
int mid=(left+right)/2;
int midnumber=n[mid];
if(right>=left){
if(midnumber>f){
find(left,mid-1,f,n);
}
else if(midnumber<f){
find(mid+1,right,f,n);
}
else if(midnumber==f){
System.out.println(f+"的下标为"+mid);
}
} //while
}
}