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);
}
}
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 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数据 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");
}
}