1.冒泡排序:
#include <stdio.h>
#include <stdlib.h>
/* 冒泡法排序 */
int main()
{
int i,j,t,a[10];
printf("Please input 10 integers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++) //相邻元素两两比较,只需要比较n-1次就行
{ //一次比较下来,最大的就排在最后
for(j=0;j<9-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("The sequence after sort is:\n");
for(i=0;i<10;i++)
printf("%-5d",a[i]);
printf("\n");
return 0;
}
2.直接插入排序:
#include <stdio.h>
/* 插入排序 */
int main(void)
{
int i,j,t,a[10];
printf("Please input 10 integers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for ( i=1; i<10; i++ )
{
t = a[i]; //待插入数
for ( j=i-1; j>=0; j-- )
{
if ( a[j] > t )
{
a[j+1] = a[j];
a[j] = t;
}
}
}
printf("The sequence after sort is:\n");
for(i=0;i<10;i++)
printf("%-5d",a[i]);
return 0;
}
3.选择排序:
include <stdio.h>
/* 选择排序 */
int main(void)
{
int i,j,k,t,a[10];
printf("Please input 10 integers:\n");
for(i=0; i<10; i++)
scanf("%d", &a[i]);
for (i=0; i<10; i++)
{
k = i; //假设最左边的为最小值,和右边的依次比较替换
for (j=i+1; j<10; j++)
{
if (a[k] > a[j])
{
t = a[k];
a[k] = a[j];
a[j] = t;
}
}
}
printf("The sequence after sort is:\n");
for(i=0; i<10; i++)
printf("%-5d", a[i]);
return 0;
}
4.希尔排序:
#include <stdio.h>
/* 希尔排序 */
int main(void)
{
int i,j,tmp,step,a[10];
int n = sizeof(a) / sizeof(a[0]);
printf("Please input 10 integers:\n");
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
for (step = n/2; step > 0; step /= 2)
{
for (i = step; i < n; i++)
{
for (j = i-step; j >= 0 && a[j] > a[j+step]; j -= step)
{
if (a[j] > a[j+step])
{
tmp = a[j];
a[j] = a[j+step];
a[j+step] = tmp;
}
}
}
}
printf("The sequence after sort is:\n");
for(i = 0; i < n; i++)
printf("%-5d", a[i]);
return 0;
}