一、排序算法概况
1.排序思想
通过比较相邻两个元素,将较大(较小)的元素往后交换,每一趟排序即可将序列中最大(最小)的元素交换到序列最后位置,且该元素不参与下一趟排序,这样经过n-1趟排序,即可完成对序列的升序(降序)排序。
2.改进思路
若序列本身是基本有序的状态,那么可能经过前几趟排序,序列就已经达到有序状态,但是算法还是会继续执行,所以可以在算法实现中加入一个标志flag,flag初始为0,若该趟排序进行了元素交换,则置flag为1,若经过一趟排序后flag没有改变还是为0,即排序过程中没有发生交换,则序列已经达到有序,此时可直接退出排序。
二、代码实现
1.完整代码
#include<stdio.h> void BubbleSort(int array[], int size);//冒泡排序 void Swap(int* num1, int* num2);//整数交换 void Printf_array(int array[], int size);//数组打印 void Test_BubbleSort();//测试函数 int main() { Test_BubbleSort(); return 0; } void BubbleSort(int array[], int size) {//冒泡排序 for (int i = 0; i < size - 1; i++) { int flag = 0; for (int j = 0; j < size - i - 1; j++) {//排升序 if (array[j] > array[j + 1]) { Swap(&array[j], &array[j + 1]); flag = 1; } } if (!flag) {//元素已经达到有序状态 break; } } } void Swap(int* num1, int* num2) { int temp = *num1; *num1 = *num2; *num2 = temp; } void Printf_array(int array[], int size) { for (int i = 0; i < size; i++) { printf("%d ", array[i]); } } void Test_BubbleSort() {//测试函数 int array[] = { 8,10,6,45,8,65,42,20,9,54 }; int size = sizeof(array) / sizeof(array[0]); printf("排序前:"); Printf_array(array, size); BubbleSort(array, size); printf("\n排序后:"); Printf_array(array, size); }
2.测试结果
三、性能分析
1.时间复杂度:O()
2.空间复杂度:O(1)
3.稳定性:稳定