3.冒泡排序算法(用指针)
#include<stdio.h>
#include<assert.h>
void Swap(int* p, int* q)//函数封装
{
int temp = *p;
*p = *q;
*q = temp;
}
void BubbleSort(int* arr, int len)
{
assert(arr != NULL && len > 0);
//优化
bool flag;
for (int i = 0;i < len;i++) //每一趟经过的流程,i控制趟数
{
flag = false;
for (int j = 0;j < len - 1 - i;j++)//j控制比较次数 //j<len-1-i表示如果j已经换了位置,再往后走不用比较了,大的数字已经在后面了
{
if (*(arr + j) > *(arr + j + 1))
{
Swap(arr + j, arr + j + 1);//传的是地址
//Swap(&[arr+j],&[arr+j+1])如果用数组就取地址
flag = true;
}
}
//if(!flag)等价下面的语句
if (flag == false) //判断这一趟是否存在交换,如果交换数据代表无序,就继续趟数,否则退出循环
{
break;
}
}
}
//测试数据
int main()
{
int arr[] = { 1,2,3,4,6,5 };
int len = sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr, len);
for (int i = 0;i < len;i++)
{
printf("%3d", arr[i]);
}
return 0;
}