分析:
冒泡排序原理:如果升序排序,将一组整数序列的第一个元素和第二个元素相比较,如果第一个元素大于第二个元素,那么交换这两个元素,如果不满足条件就不交换;然后将第二个元素和第三个元素比较,直到和最后一个元素和它前面的一个元素比较后,第一次排序完成,最大的一个数在最后。
最多排序n-1次(设有n个元素),就可排序完成。过程如下图:
排序字符串序列也是根据这个原理,只是将比较两个数大小改为比较两字符串大小,用strcmp可比较字符串,函数传参时应该用二级指针,因为字符串数组中存放的实际是每个字符串的首地址,我们要用二级指针保存数组的首地址。
冒泡排序一组整数序列:
#include<stdio.h> #include<stdlib.h> #include<assert.h> void bubble_sort(int *arr, int size) { assert(arr); int i = 0; int j = 0; int tmp = 0; int flag = 0; for (i = 0; i < size - 1; i++) { flag = 0; for (j = 0; j < size - 1 - i; j++) { if (arr[j]>arr[j + 1]) { tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; flag = 1; } } if (flag == 0) break; } } int main() { int arr[] = { 9,8,7,6,5,4,3,2,1,0}; int size = sizeof(arr) / sizeof(arr[0]); int i = 0; bubble_sort(arr, size); for (i = 0; i < size;i++) printf("%d ", arr[i]); system("pause"); return 0; }
冒泡排序一组字符串序列:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void bubble_sort(char **str,int size)
{
int i = 0;
int j = 0;
int flag = 0;
char *tmp = NULL;
for (i = 0; i < size - 1; i++)
{
flag = 0;
for (j = 0; j < size - 1 - i; j++)
{
if (strcmp(*(str + j), *(str + j + 1))>0)
{
tmp = *(str + j);
*(str + j) = *(str + j + 1);
*(str + j + 1) = tmp;
flag = 1;
}
}
if (flag == 0)
break;
}
}
int main()
{
char *str[] = { "ffff","bbbadd","bbbaaaa","cccccc","ddddddd","ssssss","eeeeeee"};
int i = 0;
int size = sizeof(str) / sizeof(str[0]);
bubble_sort(str,size);
for (i = 0; i < size; i++)
{
printf("%s ", str[i]);
}
system("pause");
return 0;
}