package com.zhaopin;
public class SortTest {
static int data []={2,4,7,5,1,9,6,0,3,8};
public static void main(String args[]){
//sortDataByBubble(data); //冒牌排序
// sortDataBySelect(data); //选择排序
// sortDataByInsert(data); //选择排序
sortDataByShell(data,data.length); //选择排序
printData(data);
}
/**
* 冒泡排序
* 时间复杂度为O(n的平方)
* 稳定的排序
* @param data
*/
public static void sortDataByBubble(int data[]){
for(int i=0;i<data.length-1;i++){
for(int j=i+1;j<data.length;j++){
if(data[i]>data[j]){
int temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}
}
}
/**
* 选择排序
* 时间复杂度为O(n的平方)
* 稳定的排序
* @param data
*/
public static void sortDataBySelect(int data[]){
for(int i=0;i<data.length-1;i++){
int tempData=i;
for(int j=i+1;j<data.length;j++){
if(data[tempData]>data[j]){
tempData=j;
}
}
if(tempData!=i){
int temp=data[i];
data[i]=data[tempData];
data[tempData]=temp;
}
}
}
/**
* 直接插入排序
* 时间复杂度为O(n的平方)
* 稳定的排序
* @param data
*/
public static void sortDataByInsert(int data[]){
int tempData;
for(int i=1;i<data.length;i++){
if(data[i-1]>data[i]){
tempData=data[i];
data[i]=data[i-1];
int j;
for(j=i-2;(j>=0)&&(data[j]>tempData);j--){
data[j+1]=data[j];
}
data[j+1]=tempData;
}
printData(data); //输出每次步骤
System.out.println();
}
}
/**
* 希尔排序
* 时间复杂度为O(nLog2(n))
* 不稳定的排序
* @param data
*/
public static void sortDataByShell(int data[],int n){
int gap=n/2;
while(gap>0){
for(int i=gap;i<n;i++){
int temp;
if(data[i-gap]>data[i]){
temp=data[i];
data[i]=data[i-gap];
int j;
for(j=i-2*gap;(j>0)&&(data[j]>temp);j=j-gap){
data[j+gap]=data[j];
}
data[j+gap]=temp;
}
}
gap=gap/2;
}
}
/**
* 二路归并排序
* 时间复杂度为O(nLog2(n))
* 不稳定的排序
* @param data
*/
public static void sortDataByMerging(int data[],int n){
}
/**
* 输出数组的内容
* @param data
*/
public static void printData(int data[]){
for(int i=0;i<data.length;i++){
System.out.print(data[i]);
}
}
}