您的位置:首页 > 编程语言 > Java开发

常见的排序算法Java实现

2018-03-31 18:41 295 查看
1、快速排序算法
public class QuickSort {
 public static void  quickSort(int k[] ,int n){
  QSort(k,0,n-1);
  }

private static void QSort(int[] k, int low, int high) {
// TODO 自动生成的方法存根
int point;
if(low <high){
point=Partiton(k,low,high);
QSort(k,low, point-1);
QSort(k,point+1,high);
}
}

private static int Partiton(int[] k,int low,int high) {
int point;
point=k[low];
while(low < high){
while(low < high&& k[high]>=point){
high--;
}
swap(k,low,high);
while(low < high && k[low]<=point){
low++;
}
swap(k,low,high);
}
return low;
}

private  static  void swap(int[] k, int low, int high) {
// TODO 自动生成的方法存根
int temp;
temp=k[low];
k[low]=k[high];
k[high]=temp;
}
public static void main(String[] args) {
  int a[]={1,2,6,3,2,5,7,8,8,9};
   System.out.println("aaaaaaaaaaaa");
quickSort(a, a.length);
System.out.println("排序后的结果如下:");
for(int i=0;i<a.length;i++){
System.out.print(" "+a[i]);
}
}

}
//快排的优化
public class QuickSort {
final static int MAX_LENGTH_INSERT_SORT=7;
 public static void  quickSort(int k[] ,int n){ 
QSort(k,0,n-1);
  }

private static void QSort(int[] k, int low, int high) {
// TODO 自动生成的方法存根
int point;
if(high-low>MAX_LENGTH_INSERT_SORT){
point=Partiton(k,low,high);
QSort(k,low, point-1);
QSort(k,point+1,high);
}else{
Insert_Sort(k,low,high);
}
}

private static int Partiton(int[] k,int low,int high) {
int point;
int m=low+(high - low)/2;
if(k[low]>k[high]){
swap(k,low,high);
}
if(k[m]>k[high]){
swap(k,low,high);
}
if(k[m]>k[low]){
swap(k,low,high);
}

point=k[low];
while(low < high){
while(low < high&& k[high]>=point){
high--;
}
 
k[low]=k[high];
while(low < high && k[low]<=point){
low++;
}
k[high]=k[low];
}
k[low]=point;
return low;
}
public static void ISort(int k[],int n){
for(int i=1;i<n;i++){
int get=k[i];
int j=i-1;
while(j>=0&&k[j]>get){
k[j+1]=k[j];
j--;
}
k[j+1]=get;
}
}

public static void Insert_Sort(int[] k,int low,int high){
ISort(k, (high-low)+2);
}
private  static  void swap(int[] k, int low, int high) {
// TODO 自动生成的方法存根
int temp;
temp=k[low];
k[low]=k[high];
k[high]=temp;
}
public static void main(String[] args) {
  int a[]={9,8,7,6,5,4,3,2,1,0};
   System.out.println("aaaaaaaaaaaa");
quickSort(a, a.length);
System.out.println("排序后的结果如下:");
for(int i=0;i<a.length;i++){
System.out.print(" "+a[i]);
}
}

}

2、插入算法实现
 public static void insert_Sort(int k[],int n){
    int j,temp = 0,count1=0,count2=0;
    for(int i=1;i<n;i++){
    if(k[i]<k[i-1]){
    count1++;
    temp=k[i];
     
    for(j=i-1;k[j]>temp;j--){
    count2++;
    k[j+1]=k[j];
    }
    k[j+1]=temp;
    }
    }

    System.out.println("总共进行了"+count1+"次比较"+count2+"次移动");
}
3、希尔排序
 public static void shell_Sort(int k[],int n){
    int j,temp = 0,count1=0,count2=0;
    int gap;
        gap=n;
    do{
    gap=gap/3+1;
    for(int i=gap;i<n;i++){
    if(k[i]<k[i-gap]){
    count1++;
    temp=k[i];
     
    for(j=i-gap;k[j]>temp;j-=gap){
    count2++;
    k[j+gap]=k[j];
    }
    k[j+gap]=temp;
    }
    }
    }while(gap>1);
    System.out.println("总共进行了"+count1+"次比较"+count2+"次移动");
     }

4、冒泡排序算法的实现
public static void Bubble_Sort(int k[],int n){
int temp,count1 = 0,count2=0;
boolean flag=true;
for(int i=0;i<n-1&&flag;i++){
for(int j=n-1;j>i;j--){
count1++;
flag=false;
if(k[j-1]>k[j]){
count2++;
temp=k[j-1];
k[j-1]=k[j];
k[j]=temp;
flag=true;
}
}
}

System.out.println("总共进行了" + count1+"比较,进行了"+count2+"次移动");

}
5、简单选择排序
 public static void select_Sort(int k[],int n){
   int min,temp,count1 = 0,count2=0;
   for(int i=0;i<n-1;i++){
   min=i;
   for(int j=i+1;j<n;j++){
                count1++;
   if(k[j]<k[min]){
   min=j;
   }
   }
   if(min!=i){
   count2++;
   temp=k[min];
   k[min]=k[i];
   k[i]=temp;
   }
   }
   System.out.println("总共进行了"+count1+"次比较"+count2+"次移动");
   }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: