冒泡排序多种实现方法

冒泡排序总是搞错他的临界值,最开始在书上看的的是这种    int arr[10] = {2,4,8,3,1,5,9,6,7,0};
    int i , j;
    int temp;
    for(i = 0 ; i < 9 ; i++){
        for(j = i+1 ; j < 10 ; j++){
            if(arr[i] > arr[j]){
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }

后来看大家写的都是这种

for(int i=0;i<arr.length -1 ;i++){  
    for(int j=0;j<arr.length-i-1;j++){ 
        if(arr[j]<arr[j+1]){
            temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
        }
    }
}

其实还有两种写法,这里就不详细去描述了,我还是比较懒的,不想去写代码啦,我觉得临界值搞来搞去都是换了个表达形式而已。有种只可意会不可言传的感觉,表达的可能不好,讲究看看哈。

因为是冒泡,从第一个下标开始一次比较,所以i从0开始,比较到最后一个数,所以i<arr.length - 1 (i<arr.length也可以,反正i=9的时候,后一个for循环j也超出范围了)。

j呢,就是从i后一个数开始比较,一直比较到最后一个数,所以j<arr.length(或者j<=arr.length - 1)
 

要硬记住的话,我感觉这样也比较好记:

i=0 ; i<arr.lenth -1 

j = i + 1 ; j  <  arr.lenth

扫描二维码关注公众号,回复: 4975254 查看本文章

就相当于j比i大1,j的范围也是这样

猜你喜欢

转载自blog.csdn.net/zhou_tomcat/article/details/86540938