冒泡、选择、插入、快排、归并、希尔排序
冒泡排序
最差时间分析:O(n^2)
平均时间复杂度:O(n^2)
public class BubbleSort_ {
public static void sort(int array[]){
int i,j;
for(i=0;i<array.length-1;i++){
for(j=i;j<array.length-1;j++){
if(array[j]>array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
}
public static void print(int array[]){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+"\t");
}
System.out.println();
}
public static void main(String[] args) {
int []array= new int[]{3, 2, 5, 8, 4, 7, 6, 9};
print(array);
sort(array);
print(array);
}
}
选择排序
public class SelectSort {
public static int[] SelectSort(int array[]){
for(int i=0;i<array.length-1;i++){
int min=i;
for(int j=i+1;j<array.length;j++){
if(array[j]<array[min]){
min=j;
}
}
if(i!=min){
int tmp=array[i];
array[i]=array[min];
array[min]=tmp;
}
}
return array;
}
public static void print(int array[]){
for(int index:array){
System.out.print("\t"+index);
}
}
public static void main(String[] args) {
int array1[]={3,2,5,8,4,7,6,9};
System.out.println("排序前:");
SelectSort.print(array1);
int array2[]=SelectSort.SelectSort(array1);
System.out.println("\n排序前:");
SelectSort.print(array2);
}
}
插入排序
最差时间分析:O(n^2)
平均时间复杂度:O(n^2)
public class InsertSort_ {
public static int[] InsertSort(int array[]){
int point;
for (int k=1;k<array.length;k++){ //最外轮是需要插入值的次数
int tmp=array[k];//存放待插入的值
point=k-1;//
while(point>-1&&tmp<array[point]){
array[point+1]=array[point];
point--;
}
array[point+1]=tmp; //插入到该插入的位置
}
return array;
}
public static void print(int array[]){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+"\t");
}
System.out.println();
}
public static void main(String[] args) {
int []array= new int[]{3, 2, 5, 8, 4, 7, 6, 9};
print(array);
InsertSort(array);
print(array);
}
}
快速排序
最差时间分析:O(n^2)
平均时间复杂度:O(n^2)
public class QuickSort3 {
public static int Partion(int array[],int left,int right){
int key=array[left]; //保存要比较的基准值
while(left<right){
//从右面开始选一个比基准值大的
while(left<right&&array[right]>=key){
--right;
}
//找到后放在本次遍历的最左边
array[left]=array[right];
//从左面开始找一个比基准值小的
while(left<right&&array[left]<=key){
++left;
}
//找到后放在
array[right]=array[left];
}
//将原来存的key基准值放回第一位
array[left]=key;
return left;
}
//通过二分缩短需要进行查找的宽度
public static void QuickSort(int array[],int left,int right){
if(left<right){
int index=Partion(array,left,right);
QuickSort(array,left,index-1);
QuickSort(array,index+1,right);
}
}
public static void main(String[] args) {
int array[]={3,2,5,8,4,7,6,9};
System.out.println(Arrays.toString(array));
QuickSort(array,0,array.length-1);
System.out.println(Arrays.toString(array));
}
}
归并排序
最差时间分析:
平均时间复杂度:
public class MergeSort {
public int[] sort(int []sourceArray){
int arr[]= Arrays.copyOf(sourceArray,sourceArray.length);
if(arr.length<2){
return arr;
}
int middle=(int) Math.floor(arr.length/2);
int left[]=Arrays.copyOfRange(arr,0,middle);
int right[]=Arrays.copyOfRange(arr,middle,arr.length);
return merge(sort(left),sort(right));
}
protected int [] merge(int []left,int []right){
int []result=new int[left.length+right.length];
int i=0;
while (left.length > 0 && right.length > 0) {
if(left[0]<=right[0]){
result[i++]=left[0];
left=Arrays.copyOfRange(left,1,left.length);
}else{
result[i++]=right[0];
right=Arrays.copyOfRange(right,1,right.length);
}
}
while(left.length>0){
result[i++]=left[0];
left=Arrays.copyOfRange(left,1,left.length);
}
while(right.length>0){
result[i++]=right[0];
right=Arrays.copyOfRange(right,1,right.length);
}
return result;
}
public static void main(String[] args) {
int array[]={3,2,5,8,4,7,6,9};
MergeSort me=new MergeSort();
int[] array1=me.sort(array);
for(int temp:array1){
System.out.print(temp+"\t");
}
}
}
希尔排序
平均时间复杂度:nlog(2n)
稳定性:不稳定
public class ShellSort {
public static void shellsort(int array[]){
int i,j,step;
int len=array.length;
//步长除以2
for(step=len/2;step>0;step/=2){
/**
* 分别对每个数组进行直接插入排序
*/
for(i=0;i<step;i++){
for(j=i+step;j<len;j+=step){
if(array[j]<array[j-step]){
int temp=array[j];
int k=j-step;
while(k>=0&&array[k]>temp){
array[k+step]=array[k];
k-=step;
}
array[k+step]=temp;
}
}
}
}
}
public static void main(String[] args) {
int array[]={3,2,5,8,4,7,6,9};
System.out.println(Arrays.toString(array));
ShellSort.shellsort(array);
System.out.println(Arrays.toString(array));
}
}