您的位置:首页 > 其它

冒泡排序、插入排序、交换排序

2016-04-13 14:36 232 查看
本文介绍复杂度为O(N^2)的三种排序:冒泡、插入以及交换,还有插入排序的变种希尔排序;

冒泡排序:(时间复杂度固定,恒为O(N^2)

void BubbleSort(int a[], int n)
{
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-i-1; j++)
if (a[i] > a[i+1])
swap(a[i], a[i+1]);
}
带flag标志的改进冒泡排序:

void BubbleSort2(int a[], int n)
{
for (int i = 0; i < n-1; i++)
{
bool flag = false;
for (int j = 0; j < n-i-1; j++)
{
if (a[j] > a[j+1])
{
swap(a[i], a[j+1]);
flag = true;
}
}
if (!flag) break;
}
}


插入排序

void InsertSort(int a[], int n)
{
for (int i = 1; i < n; i++)
{
int key = a[i];
int j = i-1;
while (j >= 0 && a[j] > a[i]) j--;
for (int k = j+1; k < i; k++) a[k+1] = a[k];
a[j+1] = key;
}
}


插入排序的变种--希尔排序:

。。。

选择排序:不稳定排序

void SelectionSort(int a[], int n)
{
for (int i = 0; i < n-1; i++)
{
int index = i;
for (int j = i+1; j < n; j++)
{
if (a[index] > a[j])
index = j;
}
if (i != index) swap(a[i], a[index]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: