参考链接:
参考链接:
1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。
3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。
4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。
有以下代码
#include "stdafx.h"//数组下标小的往后挪void bubble_sort_0(int arr[], int i_arrNum){ int i_temp; for (int i = 0; i < i_arrNum - 1; i++) { //整个数组需要排序 num - 1 次 for(int j = 0; j < i_arrNum - 1 - i; j++) { //把最小的这个数挪到数组最后需要的最大次数是 num - 1,已经排过序的数不用再管 num - i if(arr[j] < arr[j + 1])// arr[j] > arr[j+1]大数往后 // arr[j] < arr[j+1]小数往后 { i_temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = i_temp; } } for (int a = 0; a < i_arrNum; a++) { printf("%d, ", arr[a]); } printf("lalala 000 \r\n"); }}//数组下标大的往前挪void bubble_sort_1(int arr[], int i_arrNum){ int i_temp; for (int i = 0; i < i_arrNum - 1; i++) { //整个数组需要排序 num - 1 次 for(int j = (i_arrNum - 2); j >= i; j--) { //最后2个数的下标是 num - 1,num - 2 比较到下标是i为止 下标小于i是已经比较过的数 if(arr[j] < arr[j + 1]) { i_temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = i_temp; } } for (int i = 0; i < i_arrNum; i++) { printf("%d, ", arr[i]); } printf("lalala 111 \r\n"); }}int _tmain(int argc, _TCHAR* argv[]){ int arr_0[6] = { 1, 2, 3, 4, 5, 6}; bubble_sort_0(arr_0, (sizeof(arr_0) / sizeof(int))); printf("\r\n"); int arr_1[6] = { 1, 2, 3, 4, 5, 6}; bubble_sort_1(arr_1, (sizeof(arr_1) / sizeof(int))); return 0;}
运行结果: