算法学习-排序
冒泡排序(Bubble sort)
-
基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。
-
排序过程:两个相邻的数相比较,如果第二个数小,就交换位置。
-
举例:
-
排序数组:[10,1,35,61,89,36,55]
第一次排序:10和1比较,10大于1,交换位置 [1,10,35,61,89,36,55]
第二趟排序:10和35比较,10小于35,不交换位置 [1,10,35,61,89,36,55]
第三趟排序:35和61比较,35小于61,不交换位置 [1,10,35,61,89,36,55]
第四趟排序:61和89比较,61小于89,不交换位置 [1,10,35,61,89,36,55]
第五趟排序:89和36比较,89大于36,交换位置 [1,10,35,61,36,89,55]
第六趟排序:89和55比较,89大于55,交换位置 [1,10,35,61,36,55,89]
第一趟总共进行了六次比较,排序结果:[1,10,35,61,36,55,89] -
平均复杂度:O(n2)
-
代码示例:
int main(void) {
int array[] = { 12,23,21,34,23,4,53,78,89,1 };//定义数组array[]
int n = sizeof(array) / sizeof(array[0]);//存放数组中的元素个数
int i;//比较的轮数
int j;//每一轮比较的次数
int temp;//用于交换数据的临时变量
//for循环进行数组的比较
for (i = 0; i < n - 1;++i) {
for (int j = 0; j < n - i - 1;++j) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
for (int i = 0; i < n; ++i) {
printf("%d\x20",array[i]);
}
printf("\n");
return 0;
}
- 输出结果是:
- 优点:比较简单,空间复杂度较低,是稳定的
- 缺点:时间复杂度太高,效率不好