您的位置:首页 > 其它

内部排序

2015-10-23 15:54 323 查看
/*插入排序*/
/*直接插入: 稳定 O(n^2)*/
void insertion_sort(int *a, int num)
{
int tmp;
for(int i = 1; i < num; i++)
{
tmp = a[i];
int j;
for(j = i - 1; j >= 0 && tmp < a[j]; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = tmp;
}
}
/*希尔排序:不稳定 时间复杂度与增量序列有关*/

/*选择排序*/
/*直接选择:不稳定 O(n^2)*/
void selection_sort(int *a, int num)
{
int k, tmp;
for(int i = 0; i < num - 1; i++)
{
k = i;
int j;
for(j = i + 1; j < num; j++)
{
if(a[j] < a[k]) k = j;
}
tmp = a[i];
a[i] = a[k];
a[k]= tmp;
}
}
/*堆排序:不稳定 O(nlogn)*/

/*交换排序*/
/*冒泡排序:稳定 O(n^2)*/
void bubble_sort(int *a, int num)
{
int tmp;
for(int i = 0; i < num - 1; i++)
{
for(int j = 0; j < num - i - 1; j++)
{
if(a[j] > a[j + 1])
{
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
}
/*冒泡排序优化 稳定 O(n^2)*/
void bubble_sort1(int *a, int num)
{
int tmp;
num--;
while(num > 0)
{
int j = 0;
for(int i = 0; i < num; i++)
{
if(a[i] > a[i + 1])
{
tmp = a[i];
a[i] = a[i + 1];
a[i + 1] = tmp;

j = i;
}
}
num = j;
}
}
/*快速排序:不稳定 O(nlogn)*/
void quick_sort(int *a, int low, int high)
{
if(low < high)
{
int i = low, j = high;
int tmp = a[low];
while(i != j)
{
while(i < j && a[j] > tmp)
j--;
if(i < j) a[i++] = a[j];
while(i < j && a[i] < tmp)
i++;
if(i < j) a[j--] = a[i];
}
a[i] = tmp;
quick_sort(a, low, i - 1);
quick_sort(a, i + 1, high);
}
}

/*合并排序:稳定 O(nlogn)*/
/*基数排序:稳定*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: