C 排序算法:冒泡排序
一、实现
#include<stdio.h>
void popSort(int *p,int size);
void disArr(int *p,int size);
int main()
{
int arr[] = {1,9,8,7,0,2};
popSort(arr, sizeof(arr) / sizeof(*arr));
disArr(arr, sizeof(arr) / sizeof(*arr));
return 0;
}
void popSort(int *p,int size)
{
for (int i = 0; i < size - 1; ++i)
{
for (int j = 0; j < size - 1 - i; ++j)
{
if (p[j] > p[j + 1])
{
p[j] ^= p[j + 1];
p[j + 1] ^= p[j];
p[j] ^= p[j + 1];
}
}
}
}
void disArr(int *p,int size)
{
for (int i = 0; i < size; ++i)
{
printf("%-3d", p[i]);
}
puts("");
}

二、过程演示

三、优化
void popSort(int *p,int size)
{
int ordered;
for (int i = 0; i < size - 1; ++i)
{
ordered = 1;
for (int j = 0; j < size - 1 - i; ++j)
{
if (p[j] > p[j + 1])
{
p[j] ^= p[j + 1];
p[j + 1] ^= p[j];
p[j] ^= p[j + 1];
ordered = 0;
}
}
if (ordered)//序而不排
break;
}
}