冒泡排序 为什么结果是这样。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void bubble(int arr[],int arrLength) {
    
    
    int i,j,t;
    for(i=0;i<=arrLength-1;i++) {
        for(j=0;j<=arrLength-1-i;j++) {
            if (arr[i]>arr[i+1]) {
                t=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=t;
            }
        }
    }
}
int main() {
    int arr[]= {3,2,1};
    int arrLength=sizeof(arr)/sizeof(int);
    int k;
    bubble(arr,arrLength);
    for(k=0; k<arrLength; k++) {
        printf("%d",arr[k]);
    }
    return 0;
}

img

主要是冒泡排序你写错了,修改如下:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void bubble(int arr[], int arrLength) {


    int i, j, t;
    for (i = 0; i < arrLength - 1; i++) {    //小于,而不是小于等于
        for (j = 0; j < arrLength - 1 - i; j++) {   //小于,而不是小于等于
            if (arr[j] > arr[j + 1]) {  //使用j,而不是i
                t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;
            }
        }
    }
}
int main() {
    int arr[] = { 3,2,1 };
    int arrLength = sizeof(arr) / sizeof(int);
    int k;
    bubble(arr, arrLength);
    for (k = 0; k < arrLength; k++) {
        printf("%d", arr[k]);
    }
    return 0;
}