对字符串进行排序,在排序中,字符串 “bc”,“ad”,“ac”,“hello”,“xman”,“little”,“during”,“day”能够排序成 “ad”,"ac",“bc”,“during”,“day”,“hello”,“little”,
解法:
排序类问题无论任何变化,不管是排字符串还是按某种规则排序,本质都是一样,所变化的无非是元素的比较方式。
对于该题目同样适用。
使用快排,对于两个串,根据规则进行大小比较。
需要注意字符串交换位置的方法。
codepad.org已验证。
- #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");
- }
阅读(844) | 评论(0) | 转发(0) |