閒來無事,把一些常用的排序演算法整理了一遍,以供自己日後溫習之用
//**********************************選擇排序***************************************
//直接選擇排序,不穩定,時間複雜度n^2
class selectsort
}if(k!=i)}}
}//堆排序(選擇排序),不穩定,時間複雜度nlog2n
class heapsort}//
建立大根堆
private
static
void buildmaxheap(int array,int len)
if(array[k]>=array[j])else}}
}}//**********************************交換排序***************************************
//氣泡排序(交換排序),穩定,時間複雜度n^2
class bubblesort
}if(flag)}}
}//快速排序(交換排序),不穩定,時間複雜度nlog2n,空間複雜度log2n
class quicksort
int index=array[low]; //
誰知key進行劃分
int i=low;
int j=high;
while(iwhile(i//
判斷右邊元素
j--;
}array[i]=array[j];
while(iarray[i])
array[j]=array[i];
}array[i]=index;
quicksort(array, low, i-1); //
進行遞迴
quicksort(array, i+1, high);}}
//**********************************插入排序***************************************
//直接插入排序,穩定,時間複雜度n^2
class insertsort
array[j+1]=temp; //
複製到插入位置
}}}//折半插入排序,穩定,時間複雜度n^2(相比直接插入排序減少了比較次數)
class binaryinsertsortelse
}for(j=i;j>=low;j--)
array[j+1]=temp; //
插入操作
}}}//希爾排序(插入排序),不穩定,時間複雜度取決於步長函式
class shellsort
array[j+c]=temp; //
插入操作
}}}}//
二路歸併排序,穩定,時間複雜度nlog2n,空間複雜度n
class mergesort
public
static
void sort(int array,int left,int right)}//
將兩個相鄰的表合併
public
static
void merge(int array,int left,int mid,int right)
for(i=left,j=mid+1,k=i;i<=mid && j<=right;k++)else
}while(i<=mid)
while(j<=right)}}
//乙個扯淡的排序演算法,利用多執行緒實現
class sleepsort implements runnable
public
void run() catch (interruptedexception e)
system.out.print(ms+" ");
}public
static
void sleepsort(int array)
for(int i=0;inew thread(sleepsorts[i]).start();}}
}public
class test ;
selectsort.selsectsort(a);
print(a);
system.out.println("------------------堆排序---------------------");
int b=;
heapsort.heapsort(b);
print(b);
system.out.println("------------------氣泡排序---------------------");
int c=;
bubblesort.bubblesort(c);
print(c);
system.out.println("------------------快速排序---------------------");
int d=;
quicksort.quicksort(d, 0, d.length-1);
print(d);
system.out.println("------------------直接插入排序---------------------");
int e=;
insertsort.insertsort(e);
print(e);
system.out.println("------------------折半插入排序---------------------");
int f=;
binaryinsertsort.binaryinsertsort(f);
print(f);
system.out.println("------------------希爾排序---------------------");
int g=;
shellsort.shellsort(g);
print(g);
system.out.println("------------------二路歸併排序排序---------------------");
int h=;
mergesort.mergesort(h);
print(h);
system.out.println("------------------sleepsort排序---------------------");
int i=;
sleepsort.sleepsort(i);}//
列印函式
private
static
void print(int array)
system.out.println();
}}
常用排序演算法
筆者最近學習演算法,學了很久也只弄懂了幾個排序演算法,在這裡曬一下下,作為以後參考之用。一 為什麼要研究排序問題 許多計算機科學家認為,排序演算法是演算法學習中最基本的問題,原因有以下幾點 l有時候應用程式本身需要對資訊進行排序,如為了準備客戶賬目,銀行需要對支票賬號進行排序 l很多演算法將排序作為...
常用排序演算法
一 簡單排序演算法 由於程式比較簡單,所以沒有加什麼注釋。所有的程式都給出了完整的執行 並在我的vc環境 下執行通過。因為沒有涉及mfc和windows的內容,所以在borland c 的平台上應該也不會有什麼 問題的。在 的後面給出了執行過程示意,希望對理解有幫助。1.冒泡法 這是最原始,也是眾所...
常用排序演算法
排序演算法 最好時間 平均時間 最壞時間 輔助空間 穩定性 直接插入排序 o n o n 2 o n 2 o 1 穩定 希爾排序 o n 1.3 o 1 不穩定 直接選擇排序 o n 2 o n 2 o n 2 o 1 不穩定 堆排序 o n x lbn o n x lbn o n x lbn o ...