//排序--冒泡排序法升级版
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
/*
冒泡排序:
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
*/
//冒泡法排序
void BubbleSort(int * arr, int num){
if (arr == NULL)
{
printf("传入参数不可以为空!\n");
return;
}
int i = 0, j = 0, exchange = 1, temp = 0;
/*
升级版的精华所在,增加exchange变量
普通的冒泡排序需要遍历n轮,但是有可能n-1轮时候就已经排序完成了(部分数据本来有序),但是程序仍然会执行
升级版增加exchange变量,当判断在一轮排序中,任何2个元素都没有交换位置 说明该数组已经有序
*/
for (i = 0; i < num&& exchange; i++)
{
exchange = 0;
for (j = 0; (j<num - i - 1) ; j++)
{
if (arr[j]>arr[j+1])
{
//交换位置
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
exchange = 1;
}
}
}
}
//打印数组
void Print(int * arr, int num){
if (arr == NULL)
{
printf("传入参数不可以为空!\n");
return;
}
int i = 0;
for (int i = 0; i < num; i++)
{
printf("%5d", *(arr + i));
}
printf("\n");
}
void Test(){
int i = 0;
int arr[10] = { 0 };
//定义时间类型变量
time_t ts;
//生成随机数种子
srand((unsigned int)time(&ts));
for (i = 0; i < 10; i++)
{
arr[i] = (int)(rand() % 100);
}
//打印数组
printf("\n原始数据----\n");
Print(arr, 10);
//冒泡法排序
printf("冒泡法排序之后的数据\n");
BubbleSort(arr, 10);
Print(arr, 10);
}
void main(){
Test();
system("pause");
}
![](https://images2015.cnblogs.com/blog/644743/201608/644743-20160805144355090-1085022378.png)