示例代码
int arr[] = {5,8,6,4,9,3,1,7,2};
int length = sizeof(arr)/sizeof(int);
for(int i = 0; i < length - 1; i++)
{
for(int j = 0; j < length - 1- i; j++)
{
if(arr[j] > arr[j+1])
{
printf("%d和%d马上就换 ",arr[j],arr[j+1]);
printArray(arr, length);
arr[j] = arr[j] + arr[j+1];
arr[j+1] = arr[j] - arr[j+1];
arr[j] = arr[j] - arr[j+1];
}
}
}
排序结果:1 2 3 4 5 6 7 8 9
算法分析:
多擂台模式:把大的往后丢
第0轮,把最大的放在了最后
第1轮,把第二大的放在倒数第二个位置
xxx
xxx
具体过程打印
第0轮:
8和6马上就换 5 8 6 4 9 3 1 7 2
8和4马上就换 5 6 8 4 9 3 1 7 2
9和3马上就换 5 6 4 8 9 3 1 7 2
9和1马上就换 5 6 4 8 3 9 1 7 2
9和7马上就换 5 6 4 8 3 1 9 7 2
9和2马上就换 5 6 4 8 3 1 7 9 2
第1轮:
6和4马上就换 5 6 4 8 3 1 7 2 9
8和3马上就换 5 4 6 8 3 1 7 2 9
8和1马上就换 5 4 6 3 8 1 7 2 9
8和7马上就换 5 4 6 3 1 8 7 2 9
8和2马上就换 5 4 6 3 1 7 8 2 9
第2轮:
5和4马上就换 5 4 6 3 1 7 2 8 9
6和3马上就换 4 5 6 3 1 7 2 8 9
6和1马上就换 4 5 3 6 1 7 2 8 9
7和2马上就换 4 5 3 1 6 7 2 8 9
第3轮:
5和3马上就换 4 5 3 1 6 2 7 8 9
5和1马上就换 4 3 5 1 6 2 7 8 9
6和2马上就换 4 3 1 5 6 2 7 8 9
第4轮:
4和3马上就换 4 3 1 5 2 6 7 8 9
4和1马上就换 3 4 1 5 2 6 7 8 9
5和2马上就换 3 1 4 5 2 6 7 8 9
第5轮:
3和1马上就换 3 1 4 2 5 6 7 8 9
4和2马上就换 1 3 4 2 5 6 7 8 9
第6轮:
3和2马上就换 1 3 2 4 5 6 7 8 9
第7轮:
结果:
1 2 3 4 5 6 7 8 9