排序演算法整理

2022-03-30 01:43:21 字數 3158 閱讀 3952

在寫這篇文章的時候我還是初學者--希望能通過部落格觀察自己的成長

首先宣告:演算法均參考自  《資料結構教程》--李春葆著

所用到的資料結構---這裡為簡便,使用簡單的int值

class

elemtype

public

intdata;

}

main函式

public

static

void

main(string args)

for(elemtype r:r)

system.out.print(r.data);

system.out.println();

quicksort(r,0,9); //

快速排序

insertsort(r,10); //

直接插入排序

insertsort2(r,10); //

折半插入排序

shellsort(r,10); //

希爾排序

bubblesort(r,10); //

氣泡排序

selectsort(r,10); //

直接選擇排序

heapsort(r,10); //

堆排序(資料序列的下標從1開始)

for(elemtype r:r)

system.out.print(r.data);

}

插入排序:      包括直接插入排序,折半插入排序,希爾排序

static

void insertsort(elemtyper,int n)//

直接插入排序

r[j+1]=tmp; //

在j+1處插入r[i];

} }

static

void insertsort2(elemtype r, int n)//

折半插入排序

for(j=i-1;j>=high+1;j--) //

元素後移

r[j+1]=r[j];

r[high+1]=tmp; //插入}

}

static

void shellsort(elemtype r,int n) //

希爾排序

r[j+gap]=tmp;

}gap=gap/2; //

減少增量

} }

交換排序:   包括氣泡排序和快速排序

static

void bubblesort(elemtype r ,int n)//

氣泡排序

if(!flag)

return; //

本次沒有發生交換--提前結束排序

} }

static

void quicksort(elemtype r,int s,int t)//

快速排序(s,t分別是頭尾)

r[i]=tmp;

quicksort(r,s,i-1);

quicksort(r,i+1,t); //

i為中間值,所以只需要將i左邊和i右邊的處理即可

} }

選擇排序: 包括直接選擇排序和堆排序

static

void selectsort(elemtyper ,int n)//

直接選擇排序

}}

//

堆排序

static

void sift(elemtype r ,int low, int high)//

調整堆

else

break; //

篩選結束

} r[i]=tmp; //

被篩選節點的值放入最終位置

}

static

void heapsort(elemtype r,int n)//

堆排序(注意,為了與二叉樹的順序結構儲存一致,堆排序的資料序列的下標從1開始)

}

}

這裡要注意一下,由於堆排序的資料序列下標從1開始,因此資料格式跟其他排序不一樣

這裡貼出乙個專門用於堆排序測試的main函式

public

static

void

main(string args)

for(int i=1;i<11;i++)

system.out.print(r[i].data);

system.out.println();

heapsort(r,10);

for(int i=1;i<11;i++)

system.out.print(r[i].data);

}

歸併排序:

public

static

void mergesort(elemtype r,int n)//

自底向上的二路歸併演算法

public

static

void mergepass(elemtyper,int length,int n)//

對整個表進行一趟歸併

public

static

void merge(elemtype r,int low ,int mid ,int

high)

else

while(i<=mid) //

將第一段餘下部分複製到r1中

while(j<=high) //

將第二段餘下部分複製到r1中

for(k=0,i=low;i<=high;k++,i++)//

將r1複製回r中

r[i]=rt[k];

}

排序 排序演算法整理

經常零零散散的用到排序演算法,將幾類常見的總結下來 時間複雜度o n 2 空間複雜度o 1 穩定排序 param arr public static void insersort int arr else arr j 1 tmp 氣泡排序 時間複雜度 o n 2 空間複雜度o 1 穩定排序 para...

排序演算法整理

template void cinsertsort mysort function compare template void cselectsort mysort function compare swap datas i datas id void cshellsort mysort funct...

排序演算法整理

先把常用排序演算法進行分類 插入排序 直接插入排序 折半插入排序 希爾排序 交換排序 氣泡排序 快速排序 選擇排序 簡單選擇排序 堆排序 歸併排序 基數排序 下面我們乙個乙個來看 1.直接插入排序 進行n 1趟排序,每趟把乙個元素插入到前面已經排好序的序列中,其時間複雜度為o n 並且由於判斷要插入...