字符串排序(非字典排序)

2015.3.11

今天阿里面试,最后给我出了一个算法题,如下:

  一个数组字符串,对其中的字符串进行排序,排序规则如下:长度越小越排在前面,长度相同则按照字符串大小排序。举个例子:“a”,"ab","Ab","b","abc",排序后 : a, b, Ab, ab, abc。

  和室友讨论一下,由他想出了如下的方法:按照字符串的每一位进行排序,提前结束的字符串在相应位比较时总是最小。完成后,得到的结果也便是我们想要的了。

  具体代码如下:

  

 1 #include <stdio.h>
 2 #include <string.h>
 3
 4 #define N 20
 5
 6 void strSort(char s[][N], int n)
 7 {
 8     int i,j, k = 0;
 9     char tmp[N];
10     int maxlen = 0;
11     for(i = 0; i < n; ++i)
12     {
13         if(maxlen < strlen(s[i]))
14             maxlen = strlen(s[i]);
15     }
16     while(k < maxlen)
17     {
18     for(i = 1; i < n; ++i)
19     {
20         strcpy(tmp, s[i]);
21         j = i - 1;
22         for(;;)
23         {
24             if(tmp[k] == ‘\0‘)
25                 tmp[k + 1] = ‘\0‘;
26             if(s[j][k] == ‘\0‘)
27                 s[j][k + 1] = ‘\0‘;
28             if(j < 0 || tmp[k] >= s[j][k])
29                 break;
30             strcpy(s[j + 1], s[j]);
31             j--;
32         }
33         strcpy(s[j + 1], tmp);
34     }
35     k++;
36     }
37 }
38
39 void Sort(char s[][N], int n)
40 {
41
42 }
43 int main()
44 {
45     char charr[][N] = {"a","ab","Ab","b","abc"};
46     strSort(charr, 5);
47     int i = 0;
48     for(i = 0; i< 5 ; ++i)
49     {
50         printf("%s\n", charr[i]);
51     }
52 }
时间: 2024-08-07 21:17:35

字符串排序(非字典排序)的相关文章

全排序之字典排序

字典序全排列算法研究 一. 非递归算法(字典序法) 对给定的字符集中的字符规定了一个先后关系,在此基础上规定两个全排列的先后是从左到右逐个比较对应的字符的先后. 例如:字符集{1,2,3},较小的数字位置较先,这样按字典序生成的全排列是 123,132,213,231,312,321 ※ 一个全排列可看做一个字符串,字符串可有前缀.后缀. 生成给定全排列的下一个排列.所谓一个的下一个就是这一个与下一个之间没有其他的.这就要求这一个与下一个有尽可能长的共同前缀,也即变化限制在尽可能短的后缀上. 对

python中列表排序,字典排序,列表中的字典排序

#-*- encoding=utf-8 -*- import operator #按字典值排序(默认为升序) x = {1:2, 3:4, 4:3, 2:1, 0:0} sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1)) print sorted_x #[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)] #如果要降序排序,可以指定reverse=True sorted_x = sorted(x.i

&lt;转&gt;python字典排序 关于sort()、reversed()、sorted()

一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a','have','I'])) #['I', 'have', 'a', 'dream'] 2.让人糊涂的sort()与sorted() 在Python 中sorted是内建函数(BIF),而sort()是列表类型的内建函数list.sort(). sorted() sorted(iterable[,

python 字典排序 关于sort()、reversed()、sorted()

一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a','have','I'])) #['I', 'have', 'a', 'dream'] 2.让人糊涂的sort()与sorted() 在Python 中sorted是内建函数(BIF),而sort()是列表类型的内建函数list.sort(). sorted() sorted(iterable[,

字典排序及应用

字典排序: 因为我们都知道字典是无序的,所以也没有想过字典怎么排序,直到--唉 废话不多说,先看按值.按键排序的方法吧. 有一个字典dic1 = {'tired': 1, 'car': 2, 'man': 2, 'of': 1, 'front': 1, 'who': 2, 'in': 1, 'run': 2, 'exhausted': 1, 'get': 2, 'behind': 1} 按值排序:dic2 = sorted(dic1.items(),key=lambda d:d[1],rever

2016.7.30 正则表达式 字典排序

正则表达式:我要匹配字符串中两个引号中的内容 例如 str = '  map.put("abdicate","v.正式放弃(权力.责任):throne"); ' 匹配后要获得 abdicate 以及 v.正式放弃(权力.责任):throne 即引号中的红色内容 正则表达式为\"([^\"]*)\" :[^\"]是指除了"以外的字符 这样就成功得到了需要的内容.注意findall函数的使用 字典排序: key=lamb

【C语言】【数据结构】菜鸟学习日志(四) 用二叉树实现非递归排序

唉,由于要备战考研,这篇博文可能是我这一年最后一次更新啦! 其实断断续续的也没有写很多,而且大多都是很初级.很简单的东西,没有和大家分享什么高阶的东西.这也正应了我们<菜鸟学习日志>的标题嘛! 不过说回来我还是很喜欢写博文的.一方面总结学到的知识,以后也可以自己看看别做了就忘了:另一方面,写博文也让我在学习的过程中更加认真,以免分享了错误的知识. 写的东西好不好呢是一说,好像有一些点击量,不过看的人估计也不多.只是我还算乐在其中吧! 大学生活说到底过得有点浪了,导致我苦逼地走向了考研的不归路-

iOS 数组和字典排序

一.数组排序 数组排序方式1: 1 //初始化可变数组 2 NSMutableArray *arr1=[NSMutableArray arrayWithObjects:@"giu",@"min",@"Deng",@"liumin", nil]; 3 //字符串排序 4 //创建排序描述符对象NSSortDescriptor,key为空,ascending:升序 5 NSSortDescriptor *decri =[NSSor

字典排序permutation

理论 C++ 中的next_permutation 一般作为正序全排列的使用规则,其实这个就是正序字典排序的实现. 比如我们要对 列表 [1,2,3]  做full permutation 一般使用递归实现 如下, 1 static boolean generateP(int index, int high, int[] list) { 2 3 if (index == high) { 4 5 System.arraycopy(P,0,list,0,list.length); 6 7 retur