常用排序演算法

2022-03-06 22:48:36 字數 3362 閱讀 9031

閒來無事,把一些常用的排序演算法整理了一遍,以供自己日後溫習之用

//

**********************************選擇排序***************************************

//直接選擇排序,不穩定,時間複雜度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 ...