黑马程序员技术交流社区
标题:
关于字符串排序的升级版
[打印本页]
作者:
4B青年
时间:
2015-7-7 22:35
标题:
关于字符串排序的升级版
原代码如下
#include <stdio.h>
#include <string.h>
/**
* 实现字符串的排序
*
* @param arr <#arr description#>
* @param len <#len description#>
*/
void sortString(char *arr[],int len){
//冒泡排序
//临时存放地址
char *temp;
for (int i=0; i<len-1; i++) {
for (int j=0; j<len-i-1; j++) {
//arr[j] arr[j+1]
//比较字符串大小
if (strcmp(arr[j], arr[j+1])>0) {
//实现arr[j] arr[j+1]交换
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main(int argc, const char * argv[]) {
//输入5个国名并按字母顺序排列后输出。
char *name[]={ "CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
for (int i=0; i<5; i++) {
printf("%s\n",name[i]);
}
//字符串排序
sortString(name, 5);
printf("\n");
for (int i=0; i<5; i++) {
printf("%s\n",name[i]);
}
return 0;
}
复制代码
用选择排序的存储下标方式会更高效,代码如下
#include <stdio.h>
#include <string.h>
/**
* 实现字符串的排序
*
* @param arr <#arr description#>
* @param len <#len description#>
*/
void sortString(char *arr[],int len){
//选择排序
//临时存放地址
char *temp;
int min;
for (int i=0; i<len; i++) {
for (int j=i+1; j<len; j++) {
//假设arr[i]是最小值
min=i;
//arr[min] arr[j]
//比较字符串大小
if (strcmp(arr[min], arr[j])>0) {
//记下较小值的下标
min=j;
}
}
if(min!=i){
temp = arr[j];
arr[j] = arr[min];
arr[min] = temp;
}
}
}
int main(int argc, const char * argv[]) {
//输入5个国名并按字母顺序排列后输出。
char *name[]={ "CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
for (int i=0; i<5; i++) {
printf("%s\n",name[i]);
}
//字符串排序
sortString(name, 5);
printf("\n");
for (int i=0; i<5; i++) {
printf("%s\n",name[i]);
}
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2