您的位置:首页 > 编程语言 > C语言/C++

【C语言】冒泡排序,选择排序,快速排序

2015-05-12 17:23 417 查看
一、冒泡(Bubble)排序

冒泡排序(BubbleSort)的基本思想是:依次比较相邻的两个数,将小数放在前面,大数放在后面。如此重复下去,直至最终完成排序。

时间复杂度为O(n*n),适用于排序小列表。

代码:

#include <stdio.h>
void main()
{
int i, j, t, a[11];
printf("请输入10个数:\n");
for (i = 1; i < 11; i++)
scanf("%d", &a[i]);
for (i = 1; i < 10; i++)
for (j = 1; j < 11-i; j++)
if (a[j] > a[j + 1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
printf("排序后的顺序是:\n");
for (i = 1; i <= 10; i++)
printf("%5d", a[i]);
printf("\n");
}


二、选择排序

选择排序的基本思想是:每一趟从待排序的数据元素中选出最小的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

时间复杂度为O(n*n),适用于排序小列表。

代码:

#include<stdio.h>

void main()
{
int i, j, t, a[11];
printf("请输入10个数:\n");
for (i = 1; i < 11; i++)
scanf("%d", &a[i]);
for (i = 1; i <= 9; i++)
for (j = i + 1; j <= 10; j++)
if (a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
printf("排序后的顺序是:\n");
for (i = 1; i <= 10; i++)
printf("%5d", a[i]);
printf("\n");
}


三、快速排序

快速排序(Quicksort)是对冒泡排序的一种改进,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,

其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序

过程可以递归进行,以此达到整个数据变成有序序列。

时间复杂度为O(nlog2n),适用于排序大列表。

代码:

#include <stdio.h>

void qusort(int s[], int start, int end)									/*自定义函数qusort()*/
{
int i, j;													/*定义变量为基本整型*/
i = start;												/*将每组首个元素赋给i*/
j = end;												/*将每组末尾元素赋给j*/
s[0] = s[start];											/*设置基准值*/
while (i < j)
{
while (i < j && s[0] < s[j])
j--;											/*位置左移*/
if (i < j)
{
s[i] = s[j];										/*将s[j]放到s[i]的位置上*/
i++;											/*位置右移*/
}
while (i < j && s[i] <= s[0])
i++;											/*位置右移*/
if (i < j)
{
s[j] = s[i];										/*将大于基准值的s[j]放到s[i]位置*/
j--;											/*位置右移*/
}
}
s[i] = s[0];												/*将基准值放入指定位置*/
if (start < i)
qusort(s, start, j - 1);									/*对分割出的部分递归调用函数qusort()*/
if (i < end)
qusort(s, j + 1, end);
}

void main()
{
int a[11], i;												/*定义数组及变量为基本整型*/
printf("请输入10个数:\n");
for (i = 1; i <= 10; i++)
scanf("%d", &a[i]);										/*从键盘中输入10个要进行排序的数*/
qusort(a, 1, 10);											/*调用qusort()函数进行排序*/
printf("排序后的顺序是:\n");
for (i = 1; i <= 10; i++)
printf("%5d", a[i]);										/*输出排好序的数组*/
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐