原代码如下
- #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;
- }
复制代码 |
|