冒泡排序:
将给定的数组按照从小到大的顺序排列
主函数程序:
#include <stdio.h>
#include <windows.h>
//函数声明
void bubble_sort(int *array,int length);
void show(int *array,int length);
void main()
{ //给定数组元素
int array[] = {15,9,12,3,1,5,4,7,2,5,9};
//计算数组长度
int length = sizeof(array) / sizeof(array[0]);
//排序
bubble_sort(array,length);
//输出排序后数组内容
show(array,length);
system("pause");
return ;
}
执行结果:
冒泡排序算法:
//冒泡排序算法
void bubble_sort(int *array,int length)
{ //外层决定排序的趟数
for(int i = 0;i < length - 1;i++)
{ //内层循环决定比较次数
for(int j = 0;j < length - i - 1;j++)
{ //如果 array[j] > array[j + 1] 则交换顺序
if(array[j] > array[j + 1])
{
int tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
}
}
}
}
冒泡排序算法(优化):
加入一个标志:flag
①若flag == false则说明本次排序中未发生数据交换,数据已经按照从小到大完成排序,不需要继续进行操作,直接结束排序
②若flag == true标志本次发生了数据交换,根据此标志说明还需要进行下一趟排序操作
注意:一趟排序结束后如果flag == true ,在判断语句中要将flag重置为false(防止对下次排序产生影响)
//冒泡排序算法优化
void bubble_sort(int *array,int length)
{ //外层决定排序的趟数
boolean flag = FALSE; //标志:表示是否进行过交换
for(int i = 0;i < length - 1;i++)
{ //内层循环决定比较次数
for(int j = 0;j < length - i - 1;j++)
{ //如果 array[j] > array[j + 1] 则交换顺序
if(array[j] > array[j + 1])
{
flag = TRUE;
int tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
}
}
if(flag == FALSE)
{
//在一趟排序中没有进行数据交换,此时数据无需再比较,直接结束
break;
}
else
{
flag = FALSE; //重置flag,进行下次判断
}
}
}
输出数组内容:
//输出数组内容
void show(int *array,int length)
{
printf("排序后的数组为:\n");
for(int i = 0;i < length;i++)
{
printf("%d\t",array[i]);
}
printf("\n");
}
说明:此文章为学习笔记,如有侵权请联系删除。