java写的排序(冒泡排序,插入排序,选择排序,快速排序)

来源:互联网 发布:linux 禁止ip访问 编辑:程序博客网 时间:2024/06/05 14:49
package com.wql.www;
public class MySort {
 public static void main(String[] args){
  int arrLen = 9999999;
  int content = 100000;
  //int arrLen = 10;
  //int content = 200;
  MyArray arrObj = new MyArray();
  int[] arr = arrObj.createArr(arrLen,content);
  //arrObj.showArr(arr);
  /*--------------------------------------*/
  //SortIF s = new MySelect();
  MyFost s = new MyFost();
  System.out.println(java.util.Calendar.getInstance().getTime());
  //s.sort(arr);
  s.sort(arr, 0, arrLen-1);
  System.out.println(java.util.Calendar.getInstance().getTime());
  //arrObj.showArr(arr);
 }
}

interface SortIF{
 public void sort(int[] arr);
}
/**
 * 快速排序
 * 数据量9999999,耗时1s-2s
 * Sat Nov 26 16:33:13 CST 2016
 * Sat Nov 26 16:33:15 CST 2016
 * */
class MyFost implements SortIF{
 public void sort(int[] arr){}
 public void sort(int[] arr,int start,int end){
  int i = start;
  int j = end;
  boolean flag = true;
  while(i != j){
   if(flag){
    if(arr[i] >= arr[j]){
     reversal(arr, i, j);
     i++;
     flag = false;
    }else{
     j--;
    }
   }else{
    if(arr[i] > arr[j]){
     reversal(arr, i, j);
     j--;
     flag = true;
    }else{
     i++;
    }
   }
  }
  //System.out.println("start="+start+" end="+end+" 中间的index:"+i+" arr[i]="+arr[i]);
  if(i>start){
   sort(arr,start,i-1);
  }
  if(j<end){
   sort(arr,j+1,end);
  }
  
  
 }
 
 //交换位置,可以把此函数写在接口里面
 public void reversal(int [] arr,int i ,int j){
  arr[i] = arr[i]+arr[j];
  arr[j] = arr[i]-arr[j];
  arr[i] = arr[i]-arr[j];
 }
}
/**
 * 选择排序:每次从待排序数列中拿最小的值排到有序数列
 * 200000 13s
 * Sat Nov 26 13:51:30 CST 2016
 * Sat Nov 26 13:51:43 CST 2016
 * */
class MySelect implements SortIF{
 
 public void sort(int[] arr){
  int j = 0;
  int minI = 0;
  for(int i = 0;i < arr.length;i++){
   minI = i;
   for(j = i+1;j<arr.length ;j++){
    if(arr[minI]>arr[j]){
     minI = j;
    }
   }
   
   if(i != minI){
    arr[minI] = arr[minI]+arr[i];
    arr[i] = arr[minI]-arr[i];
    arr[minI] = arr[minI]-arr[i];
   }
  }
 }
}
/**
 * 插入排序:每次从待排序数列中拿第一个值排到有序数列
 * 200000数据 17s
 *Sun Nov 20 21:38:44 CST 2016
 *Sun Nov 20 21:39:02 CST 2016
 * */
class MyInsert implements SortIF{
 public void sort(int[] arr){
  int tmpV = 0;
  int j = 0;
  int tmpI = 0;
  for(int i = 0;i < arr.length;i++){
   tmpV = arr[i];
   tmpI = i;
   j = i-1;
   while(j >= 0 && arr[j] > tmpV){
    arr[j+1] = arr[j];
    arr[j] = tmpV;
    j--;
    tmpI--;;
   }
   arr[tmpI] = tmpV;
  }
 }
}

/**
 * 冒泡排序
 * 200000数据 1m8s
 *Sun Nov 20 17:38:16 CST 2016
 *Sun Nov 20 17:39:24 CST 2016
 * */
class MyMaoPao implements SortIF{
 public void sort(int[] arr){
  //int arrValue = 0;
  //int arrIndex = 0;
  int temp = 0;
  for(int i = 0;i < arr.length;i++){
   for(int j = i+1;j< arr.length;j++){
    if(arr[i]>arr[j]){
     temp = arr[i];
     arr[i] = arr[j];
     arr[j] = temp;
    }
   }
  }
 }
}

//创建数据
class MyArray{
 int arrValue = 0;
 int[] arr = null;
 public int[] createArr(int len,int content){
  arr = new int[len];
  for(int i = 0;i< arr.length;i++){
   arrValue = (int)(Math.random()*content);
   arr[i] = arrValue;
  }
  return arr;
 }
 //打印数组
 public void showArr(int[] arr){
  for(int i = 0 ;i< arr.length;i++){
   System.out.print(arr[i]+" ");
  }
  System.out.println("\n");
 }
}
0 0
原创粉丝点击