/*
对冒泡排序的理解.
理解: 45,6,56,345,67,64,23,23 从小到大排列. 第0轮比较: 拿第0个元素45与第1个元素6比较,如果大,则交换.交换. 6,45,56,345,67,64,23,25 再拿第1个元素45与第2个元素56比较,如果大,则交换.不交换. 6,45,56,345,67,64,23,25 再拿第2个元素56与第3个元素345比较,如果大,则交换.不交换. 6,45,56,345,67,64,23,25 再拿第3个元素345与第4个元素67比较,如果大,则交换.交换. 6,45,56,67,345,64,23,25 再拿第4个元素345与第5个元素64比较,如果大,则交换.交换. 6,45,56,67,64,345,23,25 再拿第5个元素345与第6个元素23比较,如果大,则交换.交换. 6,45,56,67,64,23,345,25 再拿第6个元素345与第7个元素25比较,如果大,则交换.交换. 6,45,56,67,64,23,25,345 第0轮比较完成.找到第1大的数.比较了7次. 第1轮比较完成.找到第2大的数.比较了6次. 第2轮比较完成.找到第3大的数.比较了5次. 第3轮比较完成.找到第4大的数.比较了4次. 第4轮比较完成.找到第5大的数.比较了3次. 第5轮比较完成.找到第6大的数.比较了2次. 第6轮比较完成.找到第7大的数.比较了1次.
所以规律: 对于一个长度为len的数组 一共比较 len - 1 轮 轮数+次数 = 长度 - 1 ==> 次数 = 长度 - 1 - 轮数
*/ #include <stdio.h> int main() { //定义数组 int arr[] = {45,6,56,345,67,64,23,25}; //定义长度 int len = sizeof(arr)/sizeof(arr[0]); //外层循环控制轮数 for (int i = 0; i < len - 1; i++) { //内层循环控制次数 for (int j = 0; j < len - 1 - i; j++) { //如果当前元素大于它后面的元素,则交换 if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr [j+1]; arr[j+1] = temp; } } } //打印数组 for (int i = 0; i < len; i++) { printf("%d ",arr); } return 0; }
|