簡(jiǎn)介
一般情況下,進(jìn)行排序,都有排序依據(jù)。
排序依據(jù) — 按以下三個(gè)選項(xiàng)之一進(jìn)行排序:
數(shù)據(jù)源順序 — 數(shù)據(jù)源對(duì)數(shù)據(jù)進(jìn)行自然排序的順序。通常,對(duì)于關(guān)系數(shù)據(jù)源,這往往是按字母順序 - 更具體而言,是采用自然排序順序,其與字母順序相同,但多位數(shù)字會(huì)作為單個(gè)字符進(jìn)行排序。因此,例如,如果按字母順序排序,"z11"先于 "z2",因?yàn)?"1" 的計(jì)算結(jié)果小于 "2",但是如果按自然順序排序,"z2"先于 "z11",因?yàn)?"2" 的計(jì)算結(jié)果小于 "11"。
如果使用的是多維數(shù)據(jù)集,則該順序是維度內(nèi)成員的定義分層順序。
字母 — 字母表中的字母順序。
字段 — 基于另一個(gè)字段的關(guān)聯(lián)值對(duì)數(shù)據(jù)進(jìn)行排序。例如,您可按多種產(chǎn)品的總銷售額對(duì)這些產(chǎn)品進(jìn)行排序。
按時(shí)間降序排序是指最新的時(shí)間排在最前,以此往下進(jìn)行排序。
Linux按時(shí)間排序查看文件按降序,即最近的修改 ls -lt
moudaen@morton:~$ ls -lt
total 19836
-rw-r--r-- 1 moudaen 65536 7 Nov 13 15:30 test.txt
-rw-r--r-- 1 moudaen 65536 20267062 Nov 11 17:44 Gender.war
drwxr-xr-x 2 moudaen 65536 4096 Nov 11 17:44 test
-rw-r--r-- 1 moudaen 65536 5258 Nov 11 11:44 MyApp.java
命令解釋:
-t 其實(shí)我們用man ls命令就可以看到ls命令帶的參數(shù)的用法,-t sort by modification time,newest first即按修改時(shí)間對(duì)文件進(jìn)行排序,默認(rèn)是最近修改的在前。
升序只需反轉(zhuǎn)下就可以了,所以加上-r參數(shù)
ls -lrt
moudaen@morton:~$ ls -lrt
total 19836
-rw-r--r-- 1 moudaen 65536 5258 Nov 11 11:44 MyApp.java
drwxr-xr-x 2 moudaen 65536 4096 Nov 11 17:44 test
-rw-r--r-- 1 moudaen 65536 20267062 Nov 11 17:44 Gender.war
-rw-r--r-- 1 moudaen 65536 7 Nov 13 15:30 test.txt
MySQL的時(shí)間排序ORDER BY 語(yǔ)句用于根據(jù)指定的列對(duì)結(jié)果集進(jìn)行排序。
ORDER BY 語(yǔ)句默認(rèn)按照升序?qū)τ涗涍M(jìn)行排序。
desc是descend 降序意思
asc 是ascend 升序意思1
sql = "select 表內(nèi)容名 from 數(shù)據(jù)庫(kù)表名 Putout=true order by 讀取的排序表名 asc",示例如下:
sql = "select * from user where Putout=true order by time desc" //按最新時(shí)間來(lái)排序sql = "select * from user where Putout=true order by time asc" //按早時(shí)間來(lái)排序排序算法所謂排序,就是使一串記錄,按照其中的某個(gè)或某些關(guān)鍵字的大小,遞增或遞減的排列起來(lái)的操作。排序算法,就是如何使得記錄按照要求排列的方法。排序的算法有很多,對(duì)空間的要求及其時(shí)間效率也不盡相同。下面列出了一些常見(jiàn)的排序算法。這里面插入排序和冒泡排序又被稱作簡(jiǎn)單排序,他們對(duì)空間的要求不高,但是時(shí)間效率卻不穩(wěn)定;而后面三種排序相對(duì)于簡(jiǎn)單排序?qū)臻g的要求稍高一點(diǎn),但時(shí)間效率卻能穩(wěn)定在很高的水平?;鶖?shù)排序是針對(duì)關(guān)鍵字在一個(gè)較小范圍內(nèi)的排序算法。
插入排序插入排序是這樣實(shí)現(xiàn)的:
1、首先新建一個(gè)空列表,用于保存已排序的有序數(shù)列(我們稱之為"有序列表")。
2、從原數(shù)列中取出一個(gè)數(shù),將其插入"有序列表"中,使其仍舊保持有序狀態(tài)。
3、重復(fù)2號(hào)步驟,直至原數(shù)列為空。
插入排序的平均時(shí)間復(fù)雜度為平方級(jí)的,效率不高,但是容易實(shí)現(xiàn)。它借助了"逐步擴(kuò)大成果"的思想,使有序列表的長(zhǎng)度逐漸增加,直至其長(zhǎng)度等于原列表的長(zhǎng)度。
插入排序的基本思想是在遍歷數(shù)組的過(guò)程中,假設(shè)在序號(hào) i 之前的元素即 [0..i-1] 都已經(jīng)排好序,本趟需要找到 i 對(duì)應(yīng)的元素 x 的正確位置 k ,并且在尋找這個(gè)位置 k 的過(guò)程中逐個(gè)將比較過(guò)的元素往后移一位,為元素 x “騰位置”,最后將 k 對(duì)應(yīng)的元素值賦為 x ,一般情況下,插入排序的時(shí)間復(fù)雜度和空間復(fù)雜度分別為 O(n2 ) 和 O(1)。[1]
冒泡排序冒泡排序是這樣實(shí)現(xiàn)的:
1、從列表的第一個(gè)數(shù)字到倒數(shù)第二個(gè)數(shù)字,逐個(gè)檢查:若某一位上的數(shù)字大于他的下一位,則將它與它的下一位交換。
2、重復(fù)1號(hào)步驟,直至再也不能交換。
冒泡排序的平均時(shí)間復(fù)雜度與插入排序相同,也是平方級(jí)的,但冒泡排序是原地排序的,也就是說(shuō)它不需要額外的存儲(chǔ)空間。
選擇排序選擇排序是這樣實(shí)現(xiàn)的:
1、設(shè)數(shù)組內(nèi)存放了n個(gè)待排數(shù)字,數(shù)組下標(biāo)從1開(kāi)始,到n結(jié)束。
2、初始化i=1
3、從數(shù)組的第i個(gè)元素開(kāi)始到第n個(gè)元素,尋找最小的元素。
4、將上一步找到的最小元素和第i位元素交換。
5、i++,直到i=n-1算法結(jié)束,否則回到第3步
選擇排序的平均時(shí)間復(fù)雜度也是O(n^2)的。
舉例:
564
比如說(shuō)這個(gè),我想讓它從小到大排序,怎么做呢?
第一步:從第一位開(kāi)始找最小的元素,564中4最小,與第一位交換。結(jié)果為465
第二步:從第二位開(kāi)始找最小的元素,465中5最小,與第二位交換。結(jié)果為456
第三步:i=2,n=3,此時(shí)i=n-1,算法結(jié)束
完成
快速排序現(xiàn)在開(kāi)始,我們要接觸高效排序算法了。實(shí)踐證明,快速排序是所有排序算法中最高效的一種。它采用了分治的思想:先保證列表的前半部分都小于后半部分,然后分別對(duì)前半部分和后半部分排序,這樣整個(gè)列表就有序了。這是一種先進(jìn)的思想,也是它高效的原因。因?yàn)樵谂判蛩惴ㄖ?,算法的高效與否與列表中數(shù)字間的比較次數(shù)有直接的關(guān)系,而"保證列表的前半部分都小于后半部分"就使得前半部分的任何一個(gè)數(shù)從此以后都不再跟后半部分的數(shù)進(jìn)行比較了,大大減少了數(shù)字間不必要的比較。但查找數(shù)據(jù)得另當(dāng)別論了。
基數(shù)排序基數(shù)排序(radix sort)屬于“分配式排序”(distribution sort),又稱“桶子法”(bucket sort)或bin sort,顧名思義,它是透過(guò)鍵值的部份資訊,將要排序的元素分配至某些“桶”中,藉以達(dá)到排序的作用,基數(shù)排序法是屬于穩(wěn)定性的排序,其時(shí)間復(fù)雜度為O (nlog(r)m),其中r為所采取的基數(shù),而m為堆數(shù),在某些時(shí)候,基數(shù)排序法的效率高于其它的穩(wěn)定性排序法。2