排序算法
排序算法
BUBSort 冒泡排序
伪代码
do
- swapped = false
- from i = 1 to 最后一个没有排序过元素的索引 - 1
- if left > right
- - swap (left, right)
- - swapped = true
while swapped
代码实现
void BubSort()
{
int tem=0;
bool swapped;
do
{
tem++;
swapped=false;
for(int i=1;i<=n-tem;i++)
if(a[i]>a[i+1])
swap(a[i],a[i+1]),swapped=true;
}while(swapped);
}
时间复杂度;\(O(n^2)\)。
稳定排序。
SELSort 选择排序
伪代码
do(n - 1)times
- 把 第一个没有排序过的元素 设置为 Min
- do 每个没有排序过的元素
- - 如果元素 now < 现在的 Min
- - - 将此元素设置成为新的 Min
- swap (Min, 第一个没有排序过的元素)
代码实现
void SelSort()
{
for(int i=1;i<n;i++)
{
int Min=i;
for(int j=i+1;j<=n;j++)
if(a[j]<a[Min])
Min=j;
swap(a[Min],a[i]);
}
return ;
}
时间复杂度:\(O(n^2)\)。
不稳定排序。
INSSort 插入排序
将第一个元素标记为已排序
对于每一个未排序的元素 X
“提取” 元素 X
i = 最后排序过元素的索引 到 0 的遍历
如果当前元素 j > X
将排序过的元素向右移一格
跳出循环并在此插入 X
QUISort 快速排序
对于每个(未排序)的部分
将 first 元素设为 pivot
- tem = pivot 索引 + 1
- 从 i = pivot 索引 + 1 到 最右索引 的遍历
- - 如果 a[i] < a[pivot]
- - - 交换 (i, tem); tem ++;
- 交换(pivot, tem - 1)

浙公网安备 33010602011771号