转载 shell sort

http://blog.sina.com.cn/s/blog_6d09b5750100x6zg.html

首先是shell排序实现多列排序,这里添加竖线以作分割,如下文件test:

a|gggg|4|7

b|fff2|3|2

c|gea0|6|12

d|kkkg|4|11

e|uity|6|4

f|fger|1|3

g|wabg|7|5

h|zhag|8|7

i|hang|3|3

j|lang|2|15

k|long|5|7

$cat test |sed ‘s/|/ /g‘ |sort -k3,3n -k4,4nr

当然这里可以不用将竖线去掉,直接用-t选项排序原文,需将竖线转义,用"\|":

$cat test |sort -t\| -k3,3n -k4,4nr

我们可以不用管道符号:

$sort -t\| -k3,3n -k4,4nr test

在文件中按列排序需要有间隔,所以用sed将文件中竖线"|"输出转换为空格,sort中"-k3,3n"是按第三列(key)和顺序排序(numeric-sort),"-k4,4nr"是按第四列逆序(reverse)输出,结果类似sql语句中的order by row3 ASC,row4 DESC,即优先对row1排序,在结果中,若row3相同,则在相同的基础上,对row4进行排序,这里第三、四列分别是升序和降序,结果为

f fger 1 3

j lang 2 15

i hang 3 3

b fff2 3 2

d kkkg 4 11

a gggg 4 7

k long 5 7

c gea0 6 12

e uity 6 4

g wabg 7 5

h zhag 8 7

其他排序

$cat test |sed ‘s/|/ /g‘ |sort -k3,3nr -k4,4nr

$cat test |sed ‘s/|/ /g‘ |sort -k3,3n -k4,4n

应该很容易分析吧

通过在程序中访问shell命令可获得文件内容(如php中用popen函数,结合fgets函数可获得数据,还可用explode进行分割得到数组,便可在web中访问),就如同从数据获得数据一样有了数据,可是数据库可通过limit lines1,lines2进行分页,那文件呢?

我们可以通过shell命令中的tail和head来完成,-n为指定显示行数,如下10行,+1为从第一行开始,如果没有"+"号,则为文件尾最后一行。这样就通过tail和head的结合实现分页呐,一个显示10行的首页:

$tail -n +1 |head -n 10

如第3页:

$tail -n +31 |head -n 10

至于每页显示多少(即命令中的10),随便写就是

时间: 2024-10-17 14:42:12

转载 shell sort的相关文章

Linux Shell sort 指定排序第几列

ip.txt 里存储着ip信息 统计排序后取前10条 awk '{cnt[$1]++} END{for (ip in cnt) print ip":"cnt[ip]}' ip.txt | sort -k 2 -rn -t":" | head -n 10 awk '{cnt[$1]++} END{for (ip in cnt) print cnt[ip],ip}' ip.txt | sort -rn | head -n 10 sort -k  根据第几列排序  -n

希尔排序Shell sort

希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分, 第一部分,希尔排序介绍 第二部分,如何选取关键字,选取关键字是希尔排序的关键 第一块希尔排序介绍 准备待排数组[6 2 4 1 5 9] 首先需要选取关键字,例如关键是3和1(第一步分成三组,第二步分成一组),那么待排数组分成了以下三个虚拟组: [6 1]一组 [2 5]二组 [4 9]三组 看仔细啊,不是临近的两个数字分组,而是3(分成了三组)的倍数的数字分成了一组, 就是每隔3个数取一个,每隔三个再取一个,这样取出来的数

shell sort

/**希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. *该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序.因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高. * *以n=10的一个数组49, 38,

Shell Sort based on insert sort

Reason:when it comes to insert sort,the snail appears,as it just moves forward step by step or even worse.So we need some improvement.the first idea may be that we can walk forward in big strides.Shell sort do the same thing. the basic realization(fo

[算法] shell sort

public void sort(int[] list) { int gap = list.length / 2; while (1 <= gap) { for (int i = gap; i < list.length; i++) { int j = 0; int temp = list[i]; for (j = i - gap; j >= 0 && temp < list[j]; j = j - gap) { list[j + gap] = list[j]; }

希尔排序(Shell Sort)

1.定义 希尔排序(Shell Sort)是插入排序的一种.因D.L.Shell于1959年提出而得名. 2.基本思想 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组内进行直接插人排序:然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止. 该方法实质上是一种分组插入方法. 3.Shell排序算法实现 (1

Shell Sort(希尔排序)

近日学习了Shell Sort,也就是希尔排序,也称递减增量排序算法.在1959年由DL.Shell提出于1959年提出,由此得名. 此版本算法是在插入排序(Insertion Sort)基础上,将数组分成了h份(gap).也就是在数组中每隔h个数取出一个数,为一个子数组.先在子数组上进行排序,然后不断减小h的大小,直到h == 1 时,也就是完全变成插入排序的时候,排序完成. 算法复杂度取决于h(步长/步进)的选择,在最差的时候,也就是h == 1的时候,希尔排序就变成了插入排序,复杂度为O(

经典排序算法 - 希尔排序Shell sort

经典排序算法 - 希尔排序Shell sort 希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分, 第一部分,希尔排序介绍 第二部分,如何选取关键字,选取关键字是希尔排序的关键 第一块希尔排序介绍 准备待排数组[6 2 4 1 5 9] 首先需要选取关键字,例如关键是3和1(第一步分成三组,第二步分成一组),那么待排数组分成了以下三个虚拟组: [6 1]一组 [2 5]二组 [4 9]三组 看仔细啊,不是临近的两个数字分组,而是3(分成了三组)的倍数的数字分成了一组, 就是每

希尔排序 Shell Sort

希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中:然后,对各组内的元素进行直接插入排序. 这一趟排序完成之后,每一个组的元素都是有序的.然后减小gap的值,并重复执行上述的分组和排序.重复这样的操作,当gap