冒泡排序 :是一种比较简单的排序方法

原理:即将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;

}