思想:每一遍將最大的數下沉
複雜度: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萬條記錄的資料集合。在同一資料集上,用直接插入排序 氣泡排序 快速排序 直接選擇排序 堆排序 歸併排序 基數排序等演算法進行排序,記錄所需要的時間,經過對比,得到對複...