本文共 1589 字,大约阅读时间需要 5 分钟。
冒泡排序的基本原理就是:两两比较,较小的放到前面,较大的放到后面.
/* 冒泡法 */#include//函数声明void sortArray(int array[],int length);int main(int argc, const char * argv[]) { // insert code here... //定义数组 int array[] = { 16,98,56,34,66,77}; //调用排序函数 sortArray(array, sizeof(array) / sizeof(int)); //打印排序后的数组 for (int i =0 ; i < sizeof(array) / sizeof(int); i++) { printf("%d ",array[i]); } printf("\n"); return 0;}//冒泡法(起泡法)实现void sortArray(int array[],int length){ //for循环 for (int i = 0; i < length - 1; i++) { for ( int j = 0; j < length - i -1; j++) { if (array[j] < array[j+1] ) { array[j] = array[j] + array[j+1]; array[j+1] = array[j] - array[j+1]; array[j] = array[j] - array[j+1]; } } }}
从上面的代码可以看出,外层循环 i,控制的是比较的趟数,内存循环 j 控制的是每趟比较的次数.
第一趟比较完,最大的数放到了最后,
第二趟比较的时候,找出次大的数,放在最大数前面一位,但是不会再讲最后的最大数纳入比较范围. . . . 直到全部完成排序当然冒泡排序还有其他写法:如
#includevoid swap(int *a, int *b); int main() { int array[10] = { 15, 225, 34, 42, 52, 6, 7856, 865, 954, 10}; int i, j; for (i = 0; i < 10; i++) { //每一次由底至上地上升 for (j = 9; j > i; j--) { if (array[j] < array[j-1]) { swap(&array[j], &array[j-1]); } } } for (i = 0; i < 10; i++) { printf("%d\n", array[i]); } return 0; } void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; }
这种写法,是第一次将最小的数放到最前面,第二次找出剩余数中最小的数,放到第二位 … 直到全部排序完毕
转载地址:http://rfwci.baihongyu.com/