在冒泡排序中,当内部for循环的第一次迭代发生时,i
的值为0
,因此循环将一直运行直到j
小于n
},但当j
等于n-1
时,我们再次a[j+1]
。
为什么这个值没有超出数组的索引并且代码正确执行?
for(i=0;i<n-1;i++) {
for(j=0;j<n-i;j++) { /* When i=0 & j<n why doesn't */
if(a[j] > a[j+1]) { /* a[j+1] go out of index when */
temp=a[j+1]; /* value of j is n-1 */
a[j+1]=a[j];
a[j]=temp;
}
}
}
答案 0 :(得分:0)
这是一个正确的,经过测试的冒泡排序功能:
void bubble_sort(long a[], long n)
{
long i, j, t;
for (i = 0 ; c < ( n - 1 ); i++)
{
for (j = 0 ; j < n - i - 1; j++)
{
if (a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
}
答案 1 :(得分:0)
我认为问题在于你的第二个问题。
它应该一直运行到j
小于i
,而不是n
。
void bubble(double *t, int db) {
int i, j;
for (i = db-1; i > 0; --i)
for (j = 0; j < i; ++j)
if (t[j+1] < t[j]) {
double temp = t[j];
t[j] = t[j+1];
t[j+1] = temp;
}
}