C语言实现-冒泡排序

冒泡排序的方法很简单,例如有一个数组 arr[] = {8,6,10,2,5};
用冒泡排序的思维,就需要进行4轮比较
第一轮:
从index为0开始,取出相邻的两个元素进行比较,若前一个大,交换位置,若后一个大,位置不变。index依次往下,两两相比。
首先,8和6比较,8大,数组中元素进行交换,{6,8,10,2,5}
然后8和10比较,8小,数组不变
然后10和2比较,10大,进行交换,{6,8,2,10,5}
然后10和5比较,10大,进行交换,{6,8,2,5,10}
第一轮结束,此时,最大的数字已经确定,第二轮就是比较剩下的4个数字。
依此类推,第二轮:
首先比较6和8,6小,数组不变
然后比较8和2,8大,位置交换,{6,2,8,5,10}
然后比较8和5,8大,位置交换,{6,2,5,8,10}
此时,此轮最大数字确定,第三轮,就是比较剩下的3个数字。
.....
按照这种思维,就是冒泡排序,用C实现的代码如下:

#include <stdio.h>
void bubbleSort(int arr[], int count);
int main() {   
    int acker[] = {6,23,8,12,87,65,31,19,3,5,25,101,56,47};
    int len = sizeof(acker)/sizeof(acker[0]);   
    bubbleSort(acker,len-1);
    
    int h = 0;
    for( h=0; h<len; h++){
        printf("%d ", acker[h]);
    } 
    return 0;
}

void bubbleSort(int arr[], int count){
    int i = 0;
    for( i=count; i>0; i--){            //因为len=15,所以要进行14轮的比较
        int j = 0;                            //每轮比较确定一个最大数,所以每轮进入比较的元素是递减的
        for( j=0; j<i; j++){              //i 是还要进行的轮数,j是此轮比较的最大元素的index-1
            int t = 0;
            if( arr[j] > arr[j+1] ){
                t = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = t;
            }
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。