如何让冒泡排序交换正常工作?

问题描述 投票:0回答:1
int i, j, temp, sort[5] = {5, 3, 6, 43, 11};

for(i = 0; i < 5; i++) {
    for(j = 0; j < i; j++) {
        if(sort[j] < sort[i]) {
            temp = sort[i];      
            sort[i] = sort[j];   
            sort[j] = temp;   
        }
    }
} 

我正在尝试进行冒泡排序,并尝试在外部 for 循环中初始化一个“小”变量,以将其设置为最小整数。有什么想法吗?

c sorting for-loop bubble-sort
1个回答
0
投票
if(sort[j] < sort[i]) 

这个if条件在逻辑上是错误的,这就是交换不起作用的原因,相反它应该是

if(sort[j] > sort[j+1])   

而且不需要运行5次外循环。 4 就足够了,因为所有元素都在 n-1 迭代时排序。 类似地,内部循环可以迭代n-i-1次而不是i,因为最后的元素被排序

最后修改后的代码是

for(i = 0; i < 4; i++) {
  for(j = 0; j < i-1; j++) {
    if(sort[j] > sort[j+1]) {
        temp = sort[i];      
        sort[i] = sort[j];   
        sort[j] = temp;   
     }
   }
 }
© www.soinside.com 2019 - 2024. All rights reserved.