冒泡排序 :是一種比較簡單的排序方法
原理:即將n個數進行相鄰兩兩比較,然後將較大(較小)的數依次排到最後,過程就像水中的泡泡一樣,將最大的泡泡慢慢浮出水面,因此叫冒泡排序。過程如下例:有5,4,3,2,1,0六個數,用冒泡法進行升序排列
第一趟(將5依次與其餘數比較)
(1)4,5,3,2,1,0
(2)4,3,5,2,1,0
(3)4,3,2,5,1,0
(4)4,3,2,1,5,0
(5)4,3,2,1,0,5
第二趟(將4依次與其他數比較)
(1)3,4,2,1,0,5
(2)3,2,4,1,0,5
(3)3,2,1,4,0,5
(4)3,2,1,0,4,5
第三趟(將3依次與其餘數比較)
(1)2,3,1,0,4,5,
(2)2,1,3,0,4,5
(3)2,1,0,3,4,5
第四趟(將2依次與其餘數比較)
(1)1,2,0,3,4,5
(2)1,0,2,3,4,5
第五趟(將1依次與其餘數比較)
(1)0,1,2,3,4,5
解析:由此我們可以看出n個數需要進行(n-1)趟排序,每一趟會進行(n-i)次(i指第i趟)
問題: 設有一數組,其大小爲10個元素(int str[10])數組內的數據是無序。現在要求我們通過編程將這個無序的數組變成一個從小到大排序的數組(從下標爲0開始)
方法:1.數組 2.指針 實質上大同小異,只是注意區別和使用兩者的方法!自己體會咯。。。
(1)數組
# include <stdio.h>
void bubbleSort(int arr[], int size)
{
int i = 0;
int j = 0;
for (i = 0; i < size - 1;i++)
for (j = 0; j < size - 1 - i; j++)
{
if (arr[j]>arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}int main()
{
int i=0;
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
int size = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr,size);
for (i = 0; i < size; i++)
{
printf(" %d ", arr[i]);
}
system("pause");
return 0;
}
(2)指針
# include <stdio.h>
void bubbleSort(int* p, int size)
{
int i = 0;
int j = 0;
for (i = 0; i < size - 1; i++)
for (j = 0; j < size - 1 - i; j++)
{
if (*(p+j)>*(p+j+1))
{
int tmp = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = tmp;
}
}
}
int main()
{
int i = 0;
int arr[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
int size = sizeof(arr) / sizeof(arr[0]);
int *p = arr; //數組名指數組的起始位置
bubbleSort( p, size);
for (i = 0; i < size; i++)
{
printf(" %d ", *(p+i));
}
system("pause");
return 0;
}