冒泡排序是一种内交换排序 简单但天然 此次实现了基本的冒泡排序 和 针对数据已经有序或尾部有序的情况 减少不必要的循环 从而实现优化
---C语言实现
---优化:针对已经有序 或 尾部有序减少不必要的循环
#include <stdio.h>
#include <stdlib.h>
//冒泡排序
void BubbleSort(int arr[],int length)
{
int count;
int count_in;
int iiiii = 0;
if(arr == NULL || length <=0)return ;
for(count = length-1;count>=0;count--)
{
for(count_in = 0;count_in<count;count_in++)
{
if(arr[count_in] >arr[count_in+1])
{
arr[count_in] ^=arr[count_in+1]^=arr[count_in]^=arr[count_in+1];
}
iiiii++;
}
}
printf("%d \n",iiiii);
}
//冒泡对尾有序或已有序的优化
void BubbleSort_Optimize(int arr[],int length)
{
int count;
int count_in;
int IsSorted;
int iiiii = 0;
if(arr == NULL || length <=0)return ;
IsSorted = 0;
for(count = length-1;count>=0;count--)
{
for(count_in = 0;count_in<count-IsSorted;count_in++)
{
if(arr[count_in] >arr[count_in+1])
{
arr[count_in] ^=arr[count_in+1]^=arr[count_in]^=arr[count_in+1];
IsSorted = count_in;
}
iiiii++;
}
if(!IsSorted)break ;
IsSorted = count-IsSorted;
}
printf("%d \n",iiiii);
}
//遍历数组
void LoopForArr(int arr[],int length)
{
int count;
if(arr == NULL || length <=0)return ;
for(count = 0;count<length;count++)
{
printf("%d ",arr[count]);
}
printf("\n");
}
int main()
{
int arr[] = {22,34,1,6,9,123,55,1111,1112,1113,1114};
BubbleSort_Optimize(arr,sizeof(arr)/sizeof(arr[0]));
LoopForArr(arr,sizeof(arr)/sizeof(arr[0]));
system("pause");
return 0;
}