冒泡排序的基本原理就是:两两比较,较小的放到前面,较大的放到后面.
/*
冒泡法
*/
#include <stdio.h>
//函数声明
void sortArray(int array[],int length);
int main(int argc, const char * argv[]) {
// insert code here...
//定义数组
int array[] = {16,98,56,34,66,77};
//调用排序函数
sortArray(array, sizeof(array) / sizeof(int));
//打印排序后的数组
for (int i =0 ; i < sizeof(array) / sizeof(int); i++) {
printf("%d ",array[i]);
}
printf("\n");
return 0;
}
//冒泡法(起泡法)实现
void sortArray(int array[],int length){
//for循环
for (int i = 0; i < length - 1; i++) {
for ( int j = 0; j < length - i -1; j++) {
if (array[j] < array[j+1] ) {
array[j] = array[j] + array[j+1];
array[j+1] = array[j] - array[j+1];
array[j] = array[j] - array[j+1];
}
}
}
}
从上面的代码可以看出,外层循环 i,控制的是比较的趟数,内存循环 j 控制的是每趟比较的次数.
第一趟比较完,最大的数放到了最后,
第二趟比较的时候,找出次大的数,放在最大数前面一位,但是不会再讲最后的最大数纳入比较范围.
.
.
.
直到全部完成排序
当然冒泡排序还有其他写法:如
#include <stdio.h>
void swap(int *a, int *b);
int main()
{
int array[10] = {15, 225, 34, 42, 52, 6, 7856, 865, 954, 10};
int i, j;
for (i = 0; i < 10; i++)
{
//每一次由底至上地上升
for (j = 9; j > i; j--)
{
if (array[j] < array[j-1])
{
swap(&array[j], &array[j-1]);
}
}
}
for (i = 0; i < 10; i++)
{
printf("%d\n", array[i]);
}
return 0;
}
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
这种写法,是第一次将最小的数放到最前面,第二次找出剩余数中最小的数,放到第二位 … 直到全部排序完毕