一、程序描述
冒泡排序(BubbleSort)简单来讲就是通过对其中的元素按顺序两两进行对比,按照规则不断交换,使得一些元素慢慢被换到后面,就像是水中的气泡慢慢的浮出水面(跑到后面)一样。这是一种简单的基于比较大小的排序算法。冒泡排序利用了不等式传递的思想。
算法原理:如果想把某个数组按照递增顺序排列,那么应该从头开始比较相邻的两个元素,如果后面一个元素比前面一个要大,说明顺序不对,就把他们换个位置,直到所有元素全部交换完成,则排序完成。冒泡排序一般用于初学计算机程序设计的人理解算法。
算法稳定性:如果相等的两个元素相邻,那么根据算法定义不会发生交换,如果相等的两个元素不相邻,那么通过其他的两两交换让他们相邻后也不会发生交换,所以相同元素的顺序不会发生改变,冒泡排序是一种稳定排序算法。
算法优化:
1、冒泡的同时把“水”沉下去。(上浮+下沉)
2、泡泡到顶以后再也不进行扫描。(减少无效扫描)
3、如果检测到一整轮没有发生交换,直接结束排序。
二、程序要点
1、冒泡的同时把“水”沉下去。(上浮+下沉)双向排序
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void bubble_sort_down(int arr[], int sz)//冒泡排序,双向扫描
{
int i = 0;
int t;
int m;
for (i = 0; i < (sz)/2; i++)//进行元素个数减一次排序,双向排序中可以让排序次数减半
{
int flag = 1;//定义一个整型变量一会用来判断if语句
int j;
int k;
for (j = 0; j < sz - 1 - i; j++)//每次排序次数比较次数减少i个,也就是不再对已经上浮到位的元素进行比较
{
if (arr[j] > arr[j + 1])
{
t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
flag = 0;//程序如果没来这,说明这一次扫描没有发生过换位,所以可以直接结束排序
}
}
for (k =