真的用不上,排序演算法

2021-10-13 12:48:23 字數 3599 閱讀 3427

思想:每一遍將最大的數下沉

複雜度:n^2

public

void

bubblesort

(int

arr,

int n)}if

(!flag)

break;}

}

思想:每一遍選出最小的數和前面的交換(注意:這裡會改變相對位置)

複雜度:n^2

public

void

selectsort

(int arr,

int n)}if

(minindex != i)

}}

思想:每乙個數和比自己之前大的數交換

複雜度:n^2

public

void

insertsort

(int

arr,

int n)

else}}

}

思想:每次根據incre(初始為陣列商都)/2,進行插入排序

複雜度:n^1.5

public

void

shellsort

(int arr,

int length)

else}}

}//無法分組,表示排序結束

if(incre ==1)

}}

思想:構建小頂堆,取出最大值之後再構建小頂堆,迴圈

複雜度:nlogn

public

static

void

minheap_sort

(int a,

int n)

}//構建最小堆

public

static

void

makeminheap

(int a,

int n)

}/**

* 整理小頂堆,從i節點開始調整,從0開始計算,i節點的子節點為 2*i+1, 2*i+2

** @param a 所有節點

* @param i 第i個節點

* @param n 節點總數

*/public

static

void

minheapfixdown

(int a,

int i,

int n)

//較大節點在下面

if(a[i]

<= a[j]

)break

;//較大節點在上面,則將大節點下移

temp = a[i]

; a[i]

= a[j]

; a[j]

= temp;

//復位

i = j;

j =2* i +1;

}}

思想:分治法,根據基數把左右部分分為有序的部分

複雜度:nlogn

public

static

void

quicksort

(int a,

int left,

int right)

}//基準數歸位

a[left]

= a[i]

; a[i]

= temp;

quicksort

(a, left, i -1)

;//繼續處理左邊的

quicksort

(a, i +

1, right)

;//繼續處理右邊的

}

思想:分治法,排好序然後合併,主要就是合併方法

複雜度:nlogn

/**

* 歸併排序

** @param a

* @param first

* @param last

* @param temp

*/public

void

merge_sort

(int a,

int first,

int last,

int temp)

}/**

* 合併陣列

** @param a

* @param first

* @param middle

* @param end

* @param temp

*/public

void

mergearray

(int a,

int first,

int middle,

int end,

int temp)

else

}//左邊一組中,當左邊分組被取完時,該把右邊分組全部取出來

while

(i <= m)

//右邊一組中,當左邊分組被取完時,該把右邊分組全部取出來

while

(j <= n)

//在temp中取出所有排序好的數

for(

int ii =

0; ii < k; ii++

)}

思想:桶排序的拓展排序

複雜度:d(n+r)

/**

* @param arr 原陣列

* @param temp 臨時陣列

* @param n 序列的數字個數

* @param k 最大的位數3

* @param r 基數10

* @param bin 桶中i位置儲存的個數

*/public

void

radixsort

(int arr,

int temp,

int n,

int k,

int r,

int bin)

//計算每個箱子的數字個數

for(

int j =

0; j < n; j++

)//bin[j]的個數修改為前j個箱子一共有幾個數字

for(

int j =

1; j < r; j++

)//取出每個

for(

int j = n -

1; j >=

0; j--

)//將臨時陣列賦值給我們的陣列

for(

int j =

0; j < n; j++)}

}

專案2 大資料集上排序演算法效能的體驗

檔名稱 main.cpp 完成日期 2015年12月14日 版本號 codeblocks 問題描述 設計乙個函式,產生乙個至少5萬條記錄的資料集合。在同一資料集上,用直接插入排序 氣泡排序 快速排序 直接選擇排序 堆排序 歸併排序 基數排序等演算法進行排序,記錄所需要的時間,經過對比,得到對複雜度不...

資料結構實踐 大資料集上排序演算法效能的體驗

本文是針對 資料結構基礎系列 9 排序 的實踐專案。專案 大資料集上排序演算法效能的體驗 設計乙個函式,產生乙個至少5萬條記錄的資料集合。在同一資料集上,用直接插入排序 氣泡排序 快速排序 直接選擇排序 堆排序 歸併排序 基數排序等演算法進行排序,記錄所需要的時間,經過對比,得到對複雜度不同的各種演...

第十六周實踐專案2 大資料集上排序演算法效能的體驗

檔名稱 專案2.cbp 作 者 劉晨筱 完成日期 2015年12月14日 版 本 號 v1.0 問題描述 設計乙個函式,產生乙個至少5萬條記錄的資料集合。在同一資料集上,用直接插入排序 氣泡排序 快速排序 直接選擇排序 堆排序 歸併排序 基數排序等演算法進行排序,記錄所需要的時間,經過對比,得到對複...