冒泡排序法
基本原理:
依次遍历所有元素,比较两个相邻元素,如果逆序(与要求顺序相反)则交换两个元素的位置。
时间复杂度:
对于n位的数列则有比较次数为 (n-1) + (n-2) + ... + 1 = n * (n - 1) / 2,时间复杂度为O(N^2)
#include <iostream> int main() { int arry[] = {5,3,2,4,6,1,8,9,0,7}; for (int i = 0; i < 10; i++) { for (int j = 0; j < 9; j++) { if (arry[j] < arry[j+1]) { int tmp = arry[j]; arry[j] = arry[j+1]; arry[j+1] = tmp; } } for(int i = 0; i<10;i++) printf("%d",arry[i]); printf(" "); } return 0; }
改进:
通过判断是否发生交换来确定是否需要继续比较;如果没有发生交换说明已经排序完成则跳出循环。
#include <iostream> int main() { int arry[] = {5,3,2,4,6,1,8,9,0,7}; bool sortflag = false; for (int i = 0; i < 10; i++) { sortflag = false; for (int j = 0; j < 9; j++) { if (arry[j] < arry[j+1]) { int tmp = arry[j]; arry[j] = arry[j+1]; arry[j+1] = tmp; sortflag = true; } } if (sortflag == false) { printf("排序完成跳出循环 "); break; } for(int i = 0; i<10;i++) printf("%d",arry[i]); printf(" "); } return 0; }