一、源码
#include<stdio.h>
#define M 5
void swap(int* a, int* b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int num[M]={88,77,66,55,44}, i, end;
for (i = 0; i < M; i++)
printf("%d ", num[i]);
printf("\n\n");
for (i = 1; i < M; i++)
{
for (end = i; end >= 0; end--)
{
if (num[end] < num[end - 1] && (end - 1) >= 0)
{
swap(&num[end], &num[end - 1]);
}
}
}
for (i = 0; i < M; i++)
printf("%d ", num[i]);
return 0;
}
二、思路
未排序前数组中有乱序88,77,66,55,44。
将数组分为有序段和无序段(在有序段后加的end)
1.有序段一开始为零88,end为77(代码中i从1开始),88>77则交换为77 88;
2.有序段为77 88,end为66,88>66,则交换为77 66 88,end前移(要保证end-1>=0),end为66,77>66,则交换为66 77 88;
3.……
以此类推
88 | 77 | 66 | 55 | 44 | |
i=1 | 77 | 88 | 66 | 55 | 44 |
i=2 | 66 | 77 | 88 | 55 | 44 |
i=3 | 55 | 66 | 77 | 88 | 44 |
i=4 | 44 | 55 | 66 | 77 | 88 |
三、运行结果