分析:
冒泡排序原理:如果升序排序,将一组整数序列的第一个元素和第二个元素相比较,如果第一个元素大于第二个元素,那么交换这两个元素,如果不满足条件就不交换;然后将第二个元素和第三个元素比较,直到和最后一个元素和它前面的一个元素比较后,第一次排序完成,最大的一个数在最后。
最多排序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;
}
原文:http://haipi.blog.51cto.com/10778780/1719607