1、直接插入排序
#include <stdio.h>
#include <stdlib.h>
void insert_sort(int a[], int n)
{
int i, j;
for (i = 2; i < n; i++) //第二个纪录开始插入n - 1趟
{
a[0] = a[i]; //设置监视哨
j = i - 1;
while(a[0] < a[j])
{
a[j + 1] = a[j]; //后移一个位置
j--;
}
a[j + 1] = a[0];
}
return ;
}
int main(int argc, const char *argv[])
{
int i;
int a[11] = {0, 2, 5, 1, 56, 34, 23, 67, 52, 68, 102};
for (i = 1; i < 11; i++)
printf("%d ", a[i]);
printf("\n");
insert_sort(a, 11);
for (i = 1; i < 11; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
2、冒泡排序
#include <stdio.h>
void sort(int a[], int n)
{
int i, j;
int temp, flag;;
for (i = 1; i < n; i++) //n - 1趟
{
flag = 0; //交换标志
for (j = n -1; j >= i; j--)
{
if (a[j] < a[j - 1])
{
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
flag = 1;
}
}
if (flag == 0)
break;
}
return ;
}
int main(int argc, const char *argv[])
{
int i;
int a[10] = {99, 4, 5, 23, 12, 56, 35, 57, 98, 45};
sort(a, 10);
for (i = 0; i < 10; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
3、直接选择排序
#include <stdio.h>
void select_sort(int a[], int n)
{
int i, j, m;
int temp;
for (i = 0; i < n - 1; i++) //n - 1趟
{
m = i;
//筛选出最小的数
for (j = i + 1; j < n; j++)
{
if (a[j] < a[m])
m = j;
}
if (m != i)
{
temp = a[i];
a[i] = a[m];
a[m] = temp;
}
}
return ;
}
int main(int argc, const char *argv[])
{
int i;
int a[] = {43, 23, 45, 56, 21, 67, 4, 2, 64, 25};
select_sort(a, 10);
for (i = 0; i < 10; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}