对字符串进行排序,在排序中,字符串 “bc”,“ad”,“ac”,“hello”,“xman”,“little”,“during”,“day”能够排序成 “ad”,"ac",“bc”,“during”,“day”,“hello”,“little”,
解法:
排序类问题无论任何变化,不管是排字符串还是按某种规则排序,本质都是一样,所变化的无非是元素的比较方式。
对于该题目同样适用。
使用快排,对于两个串,根据规则进行大小比较。
需要注意字符串交换位置的方法。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(char **str1,char **str2){
char *temp=*str1;
*str1=*str2;
*str2=temp;
}
int compare(char* str1, char*str2){
while(*str1 && *str2 && *str1==*str2){
str1++;
str2++;
}
return *str1-*str2;
}
int partition(char** set, int startindex, int endindex){
if(set == NULL) return ;
char* pi = set[endindex];
int low = startindex;
int high = startindex+1;
for(;high<endindex;high++){
if(compare(set[high], pi) < 0){
low++;
swap(&set[low],&set[high]);
}
}
low++;
swap(&set[low], &set[high]);
return low;
}
void sort(char** set, int startindex, int endindex){
if(startindex>= endindex) return;
int mid = partition(set, startindex, endindex);
sort(set, startindex, mid-1);
sort(set, mid+1, endindex);
}
int main(){
char *set[] = {"a","ac","ab","aeg","aef"};
int i = 0;
sort(set, 0,4);
for(;i<5;i++){
printf("%s ", set[i]);
}
printf("\n");
}