#include <stdio.h>
int main()
{
int nums[10] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int i, j,k, temp;
//冒泡排序算法:进行 n-1 轮比较
for(i=0; i<10-1; i++)
{
//每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较
for(j=0; j<10-1-i; j++)
{
if(nums[j] > nums[j+1])
{
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
printf("\n");
for(k=0; k<10; k++)
{
printf("%d ", nums[k]);
}
}
}
printf("\n\n");
for(i=0; i<10; i++){
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
执行结果
9 10 8 7 6 5 4 3 2 1
9 8 10 7 6 5 4 3 2 1
9 8 7 10 6 5 4 3 2 1
9 8 7 6 10 5 4 3 2 1
9 8 7 6 5 10 4 3 2 1
9 8 7 6 5 4 10 3 2 1
9 8 7 6 5 4 3 10 2 1
9 8 7 6 5 4 3 2 10 1
9 8 7 6 5 4 3 2 1 10
8 9 7 6 5 4 3 2 1 10
8 7 9 6 5 4 3 2 1 10
8 7 6 9 5 4 3 2 1 10
8 7 6 5 9 4 3 2 1 10
8 7 6 5 4 9 3 2 1 10
8 7 6 5 4 3 9 2 1 10
8 7 6 5 4 3 2 9 1 10
8 7 6 5 4 3 2 1 9 10
7 8 6 5 4 3 2 1 9 10
7 6 8 5 4 3 2 1 9 10
7 6 5 8 4 3 2 1 9 10
7 6 5 4 8 3 2 1 9 10
7 6 5 4 3 8 2 1 9 10
7 6 5 4 3 2 8 1 9 10
7 6 5 4 3 2 1 8 9 10
6 7 5 4 3 2 1 8 9 10
6 5 7 4 3 2 1 8 9 10
6 5 4 7 3 2 1 8 9 10
6 5 4 3 7 2 1 8 9 10
6 5 4 3 2 7 1 8 9 10
6 5 4 3 2 1 7 8 9 10
5 6 4 3 2 1 7 8 9 10
5 4 6 3 2 1 7 8 9 10
5 4 3 6 2 1 7 8 9 10
5 4 3 2 6 1 7 8 9 10
5 4 3 2 1 6 7 8 9 10
4 5 3 2 1 6 7 8 9 10
4 3 5 2 1 6 7 8 9 10
4 3 2 5 1 6 7 8 9 10
4 3 2 1 5 6 7 8 9 10
3 4 2 1 5 6 7 8 9 10
3 2 4 1 5 6 7 8 9 10
3 2 1 4 5 6 7 8 9 10
2 3 1 4 5 6 7 8 9 10
2 1 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
优化后的算法,可以通过内循环查看是否已经排序好,如果排序好,就不再需要排序。
#include <stdio.h>
int main()
{
int nums[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int i, j,k, temp, isSorted;
//冒泡排序算法:进行 n-1 轮比较
for(i=0; i<10-1; i++)
{
isSorted = 1;
//每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较
for(j=0; j<10-1-i; j++)
{
if(nums[j] > nums[j+1])
{
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
isSorted = 0;
}
printf("\n");
for(k=0; k<10; k++)
{
printf("%d ", nums[k]);
}
}
if(isSorted) break;
}
printf("\n\n");
for(i=0; i<10; i++){
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
执行结果
1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
如果不优化,程序就会出现空跑。