冒泡排序及优化
冒泡排序:
原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,
这样一趟过去后,最大或最小的数字被交换到了最后一位。当i次遍历的时候将找到
第i+1大(小)的数放到倒数第i+1的位置。代码如下:
void bubbleSort(int* arr, int size) { if(arr == NULL) return; for(int i=0; i<size; i++) { for(int j=0; j<size-i-1; j++) { if(arr[j]>arr[j+1]) { mySwap(arr[j], arr[j+1]); } } } }
这样的代码,当面对一个已经排好序的数组时将会做很多的无用攻。
排序过程中,当某次遍历中没有进行数据交换,则代表数组已经排好
序了。因此,我们可做适当的改进:
void sort(int* arr, int size) { if(arr == NULL) return; for(int i=0; i<size; i++) { int nSwapNum = 0; for(int j=0; j<size-i-1; j++) { if(arr[j]>arr[j+1]) { mySwap(arr[j], arr[j+1]); nSwapNum++; } } if(nSwapNum == 0) return; } }
结束!