冒泡排序是一種內交換排序 簡單但天然 此次實現了基本的冒泡排序 和 針對數據已經有序或尾部有序的情況 減少不必要的循環 從而實現優化
---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;
}