冒泡排序
冒泡原理:从左到右,相邻元素进行比较。
每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。
- 冒泡排序法的缺点是时间复杂度高,因为要对一组数据进行多次循环。
- 优点是稳定性高,相同的两个元素进行比较不会互换位置,所以冒泡排序可以对任意一组数据排序。
原理
代码
#include <stdio.h>
#define N 10
int main()
{
int a[N], i, j, t;
printf("Please enter the ten integer: \n");
for (i = 0; i < N; i++)
{
/* 获取键盘输入的10个数 */
scanf("%d", &a[i]);
}
// BubbleSort
for (j = 0; j < 9; j++)
for (i = 0; i < 9 - j; i++)
if (a[i] > a[i + 1])
{
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
printf("After BubbleSort:\n");
for (i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
插入排序
每一步将一个数插入一个已经排好的序列中,并使之保持有序。直到插完所有的数为止。
原理
代码
#include <stdio.h>
#define N 10
int main()
{
int a[N], i, j, t;
printf("Please enter the ten integer: \n");
for (i = 0; i < N; ++i)
{
scanf("%d", &a[i]);
}
for (i = 1; i < N; ++i)
{
t = a[i];
for (j = i - 1; j > -1 && a[j] > t; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = t;
}
printf("After InsertSort:\n");
for (i = 0; i < N; ++i)
{
printf("%d ", a[i]);
}
return 0;
}
选择排序
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
- 缺点是此排序方法不稳定。
原理
代码
#include <stdio.h>
#define N 10
int main()
{
int i, j, min, tem, a[N];
printf("Please Enter The 10 Number: \n");
for (i = 0; i < N; i++)
{
/* 获取键盘输入的10个数 */
scanf("%d", &a[i]);
}
//SelectionSort
for (i = 0; i < N - 1; i++)
{
/* code */
min = i;
for (j = i + 1; j < N; j++)
{
/* code */
if (a[min] > a[j])
{
/* code */
min = j;
}
tem = a[i];
a[i] = a[min];
a[min] = tem;
}
printf("After SelectionSort: \n");
for (i = 0; i < N; i++)
{
/* code */
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
}