前言
冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。
源代码
Bubble_sort.c
#include <stdio.h>
int main()
{
int a[100], i, j, t, n;
scanf("%d", &n); // put in a number n, that means you have n numbers to follow
for (i = 1; i <= n; i++) // Loop through numbers into array A
scanf("%d", &a[i]);
// The core of Bubble Sort
for (i = 1; i <= n-1; i++) // Sort n numbers, just do n minus 1 times
{
for (j = 1; j <= n-i; j++) // Compare from the first digit to the last unreturned digit
{
if (a[j] < a[j+1]) // Compare sizes and swap
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
// The output
for (i = 1; i <= n; i++)
printf("%d ", a[i]);
printf("\n");
getchar();
getchar();
return 0;
}
首先输入n个数,保存到数组中。然后利用双重for循环进行排序。外循环只需进行n-1次,如果有5个数需要排序,只需进行4次外循环,因为第n-1次循环已经把最后一个和倒数第二个都排序好了。内循环则进行n-i次,每执行一次就把一个值排好序。假设有5个值,第1次比较1-5,第二次比较1-4,第三次比较1-3……直到只剩下一个值。
Bubble_sort2.c
#include <stdio.h>
struct student
{
char name[21];
char score;
}; // A structure is created to store the name and score
int main()
{
struct student a[100], t;
int i, j, n;
scanf("%d", &n); // Put in a number n
for (i = 1; i <= n; i++) // Loop through n names and scores
scanf("%s %d", a[i].name, &a[i].score);
// Sort by score from highest to lowest
for (i = 1; i <= n-1; i++)
{
for (j = 1; j <= n-i; j++)
{
if (a[j].score < a[j+1].score) // Compare scores
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
// The output names
for (i = 1; i <= n; i++)
printf("%s\n", a[i].name);
getchar();
getchar();
return 0;
}
利用结构体保存名字和分数,根据分数由高到低输出名字。
总结
冒泡排序的核心部分是双重嵌套循环。不难看出冒泡排序的时间复杂度是O(N2)。这是一个非常高的时间复杂度。