例如 hello good suqian nice world
输出 good hello nice suqian world
分析:使用strcmp比较字符串,最后用冒泡排序排序。
下面是代码实现:
/*************************************
字符串数组的冒泡排序,从小到大
例如 hello good suqian nice world
输出 good hello nice suqian world
*************************************/
#include <stdio.h>
#include <stdlib.h>
#define LEN 5
int mystrlen(char *str) //计算字符串长度
{
if (str == NULL)
{
return -1;
}
int length = 0;
while (*str++ != '\0')
{
length++;
}
return length;
}
int mystrcmp(const char *str1, const char *str2) //比较字符串大小,大于返回正数,小于负数,相等为0
{
char *p1 = (char *)str1;
char *p2 = (char *)str2;
if (str1 == NULL || str2 == NULL)
{
return -1;
}
#if 0
if (mystrlen(p1) != mystrlen(p2)) //如果长度不等,那么长的大
{
return (mystrlen(p1) > mystrlen(p2) ? 1 : -1);
}
#endif
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0; //相等返回0
}
str1++;
str2++;
}
return (*str1 - *str2);
}
void Sort(char **str, const int len) //排序字符串数组
{
int i = 0;
int j = 0;
char *temp = NULL;
temp = (char *)malloc(10 * sizeof (char));
char *p = temp;
for (i = 0; i < len - 1; i++) //冒泡排序
{
for (j = 0; j < len - i - 1; j++)
{
if (mystrcmp(str[j], str[j + 1]) > 0) //比较字符串大小按照ASCII比较
{
p = str[j];
str[j] = str[j + 1];
str[j + 1] = p;
}
}
}
free(temp);
temp = NULL;
}
int main()
{
int i = 0;
char *str[LEN] = {"hello", "suqian", "world", "nice", "good"}; //定义指针数组
Sort(str, LEN); //冒泡排序
for (i = 0; i < LEN; i++)
{
printf ("%s\n", str[i]); //输出结果
}
return 0;
}