题目:给定一组数字,使用冒泡排序将其按升序序列排序。
解题思路:冒泡排序利用两个嵌套while循环完成,内层循环每循环一次就将找的的最大数已到最后一个位置,此时这个位置就不用管了,再排序前面的数。
void swap(int *x, int *y) //交换两数的位置
{
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
void show(int *arr, int len) //打印数组
{
int i = 0;
for (i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void bubble_sort(int *arr, int len)
{
int *start = arr;
int *end = arr + len - 1;
while (arr < end)
{
int flag = 0; //标识符
start = arr; //每次都从第一个元素开始
while (start < end)
{
if (*start > *(start + 1))
{
flag = 1;
swap(start, start + 1);
}
start++;
}
end--; //一趟冒泡后,把最大数放到最后一个位置,接下来只用排序前面的数。
if (!flag) //如果flag=0,表示这一趟没进行交换操作,此时已经排列好了,直接退出
return;
}
}
int main()
{
int arr[] = { 2, 5, 6, 3, 1, 4, 7, 9, 0, 8 };
int len = sizeof(arr) / sizeof(arr[0]);
show(arr, len);
bubble_sort(arr, len);
show(arr, len);
system("pause");
return 0;
}