練習題005:氣泡排序
阿新 • • 發佈:2019-02-14
題目:給定一組數字,使用氣泡排序將其按升序序列排序。
解題思路:氣泡排序利用兩個巢狀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;
}