排序算法(C语言)
题目:输入十个数,升序排序。
- 选择符排序:
#include<stdio.h>
int main()
{
int i, j;
int t, a[10];
for (i = 0; i < 10; i++)
{
scanf_s("%d", &a[i]);
}
for (i = 0; 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;
}
}
}
for (i = 0; i < 10; i++)
{
printf("%3d", a[i]);
}
return 0;
}
- 直接法排序:
#include<stdio.h>
int main()
{
int i, j,k;
int t, a[10];
for (i = 0; i < 10; i++)
{
scanf_s("%d", &a[i]);
}
for (i = 0; i < 9; i++)
{
k = i;
for (j = i + 1; j < 10; j++)
{
if (a[k] > a[j])//如果前面的数比后面的数大
{
k = j; //就记录较小数的下标
}
}
if (i != k)//交换位置,把最小数移到最前面
{
t = a[i];
a[i] = a[k];
a[k] = t;
}
}
for (i = 0; i < 10; i++)
{
printf("%3d", a[i]);
}
return 0;
}
- 冒泡法排序:
#include<stdio.h>
int main()
{
int i, j,N;
scanf_s("%d", &N);
int t, a[100];
for (i = 0; i < N; i++)
{
scanf_s("%d", &a[i]);
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N-i-1; j++)
{//若有n个元素,两两比较一轮需要进行n-1次
if (a[j] > a[j+1]) //两两比较,每轮将最大数放到最后一个
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
for (i = 0; i < N; i++)
{
printf("%3d", a[i]);
}
return 0;
}