何为打擂台排序法?
打擂台排序法:把一个数据比作一个人,人与人之间的单挑,即为数据之间大小值的比较。一个数据同多个数据进行比较,类似于打擂台。
排序思路
假设我的数组排序是从小到大的排序,例如第一个数据A比第二个数据B大,我们就使其进行数值交换(这里我们要定义一个局部变量来存原先的值)。
注意:我们此时只是交换数据,没有偏移或者交换数组的下标!
那么我们在交换完数据后,第一个数据变为B,此时我们需要一个偏移,让第一个数据继续与其他数据进行比较。
我的设计的理念:只要是比第一个数据大的就进行数据交换。
当第一个数据与所有数据比较完后,就可以确保了第一个数据为最小数值。此时我们只是确定了第一个数据是最小值,我们通过数据偏移让第二个数据与第三个,第四个,第五个.....进行比较,以此类推,我们走完程序,就相当于每一个数据都进行了一个打擂台的循环。
缺点:打擂台方式的比较的次数太多,代码执行效率不高,能够实现数组的数据排序.
完整代码实现效果
#include <stdio.h>
int main()
{
int a[10] = {1, 10, 4, 11, 34, 2, 12, 45, 6, 3};
int num = 1;
for (int n = 0; n <= 9; n++)
{
for (int j = n; j <= 9; j++)
{
if (a[n] > a[j]) // 大变小
{
int tmp = a[n];
a[n] = a[j];
a[j] = tmp;
for (int n = 0; n <= 9; n++)
{
printf("%d ", a[n]);
}
printf("%20d次", num++);
printf("\n");
}
}
}
for (int n = 0; n <= 9; n++)
{
printf("%d ", a[n]);
}
printf("\n");
}