我想你的第一个循环是错误太多,考虑到要实现Bubble Sort
,由于第一循环讲述排序列表所需的遍数。在气泡排序的情况下,它相当于Total Number of elements - 1
需要传递数量来排序n个元素(n-1)传递的列表,因此如果我没有弄错,我认为i
的值必须从1开始。此外,由您提供的代码片段不像C语言编码风格,就您声明的变量而言。
第二个循环基本上是在每次迭代之后减少比较(元素数量 - 传递-1),因为每次传递时,我们将最大的元素放在(逻辑上未排序的列表的)右侧。因此,由于该元素处于正确的位置,所以我们不必将其与其他元素进行比较。
4 3 2 1 Original List
3 2 1 4 Pass 1
-
Now since this above 4 is in it's rightful place
we don't need to compare it with other elements.
Hence we will start from the zeroth element and
compare two adjacent values, till 1 (for Pass 2)
Here comparison will take place between 3 and 2,
and since 3 is greater than 2, hence swapping
between 3 and 2, takes place. Now 3 is comapred
with 1, again since greater value is on left
side, so swapping will occur. Now 3 is not compared
with 4, since both these values are in their
rightful place.
2 1 3 4 Pass 2
-
Now since this above 3 is in it's rightful place
we don't need to compare it with other elements.
Hence we will start from the zeroth element and
compare two adjacent values, till 1 (for Pass 3)
Here only one comparison will occur, between
2 and 1. After swapping 2 will come to it's rightful
position. So no further comparison is needed.
1 2 3 4 Pass 3
Here the list is sorted, so no more comparisons, after Pass 3.
void bubbleSort(int *ptr, int size)
{
int pass = 1, i = 0, temp = 0;
for (pass = 1; pass < size - 1; pass++)
{
for (i = 0; i <= size - pass - 1; i++)
{
if (*(ptr + i) > *(ptr + i + 1))
{
temp = *(ptr + i);
*(ptr + i) = *(ptr + i + 1);
*(ptr + i + 1) = temp;
}
}
printf("Pass : %d\n", pass);
for (temp = 0; temp < size; temp++)
printf("%d\t", *(ptr + temp));
puts("");
}
}
我想你的第一个循环也是错误的,因为你想实现'Bubble Sort',因为第一个循环指出了排序列表所需的遍数。在气泡排序的情况下,它等于'总元素数量 - 1',因此我的愚见中的值必须从1开始,如果我没有错误 – 2013-03-10 06:19:03