簡介
一般情況下,進行排序,都有排序依據。
排序依據 — 按以下三個選項之一進行排序:
數據源順序 — 數據源對數據進行自然排序的順序。通常,對於關係數據源,這往往是按字母順序 - 更具體而言,是採用自然排序順序,其與字母順序相同,但多位數字會作為單個字元進行排序。因此,例如,如果按字母順序排序,"z11"先於 "z2",因為 "1" 的計算結果小於 "2",但是如果按自然順序排序,"z2"先於 "z11",因為 "2" 的計算結果小於 "11"。
如果使用的是多維數據集,則該順序是維度內成員的定義分層順序。
字母 — 字母表中的字母順序。
欄位 — 基於另一個欄位的關聯值對數據進行排序。例如,您可按多種產品的總銷售額對這些產品進行排序。
按時間降序排序是指最新的時間排在最前,以此往下進行排序。
Linux按時間排序查看檔案
按降序,即最近的修改 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 其實我們用man ls命令就可以看到ls命令帶的參數的用法,-t sort by modification time,newest first即按修改時間對檔案進行排序,默認是最近修改的在前。
升序只需反轉下就可以了,所以加上-r參數
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的時間排序
ORDER BY 語句用於根據指定的列對結果集進行排序。
ORDER BY 語句默認按照升序對記錄進行排序。
desc是descend 降序意思
asc 是ascend 升序意思
sql = "select 表內容名 from 資料庫表名 Putout=true order by 讀取的排序表名 asc",示例如下:
sql = "select * from user where Putout=true order by time desc" //按最新時間來排序
sql = "select * from user where Putout=true order by time asc" //按早時間來排序
排序算法
所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序算法,就是如何使得記錄按照要求排列的方法。排序的算法有很多,對空間的要求及其時間效率也不盡相同。下面列出了一些常見的排序算法。這裡面插入排序和冒泡排序又被稱作簡單排序,他們對空間的要求不高,但是時間效率卻不穩定;而後面三種排序相對於簡單排序對空間的要求稍高一點,但時間效率卻能穩定在很高的水平。基數排序是針對關鍵字在一個較小範圍內的排序算法。
插入排序
1、首先新建一個空列表,用於保存已
排序的有序數列(我們稱之為"有序列表")。
2、從原數列中取出一個數,將其插入"有序列表"中,使其仍舊保持有序狀態。
3、重複2號步驟,直至原數列為空。
插入排序的平均
時間複雜度為平方級的,效率不高,但是容易實現。它藉助了"逐步擴大成果"的思想,使有序列表的長度逐漸增加,直至其長度等於原列表的長度。
插入排序的基本思想是在遍歷數組的過程中,假設在序號 i 之前的元素即 [0..i-1] 都已經排好序,本趟需要找到 i 對應的元素 x 的正確位置 k ,並且在尋找這個位置 k 的過程中逐個將比較過的元素往後移一位,為元素 x “騰位置”,最後將 k 對應的元素值賦為 x ,一般情況下,插入排序的時間複雜度和空間複雜度分別為 O(n2 ) 和 O(1)。[1]
冒泡排序
1、從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換。
2、重複1號步驟,直至再也不能交換。
冒泡排序的平均
時間複雜度與
插入排序相同,也是平方級的,但冒泡排序是原地排序的,也就是說它不需要額外的存儲空間。
選擇排序
1、設
數組記憶體放了n個待排數字,數組下標從1開始,到n結束。
2、初始化i=1
3、從數組的第i個元素開始到第n個元素,尋找最小的元素。
4、將上一步找到的最小元素和第i位元素交換。
5、i++,直到i=n-1算法結束,否則回到第3步
舉例:
564
第一步:從第一位開始找最小的元素,564中4最小,與第一位交換。結果為465
第二步:從第二位開始找最小的元素,465中5最小,與第二位交換。結果為456
第三步:i=2,n=3,此時i=n-1,算法結束
完成
快速排序
現在開始,我們要接觸高效
排序算法了。實踐證明,
快速排序是所有排序算法中最高效的一種。它採用了分治的思想:先保證列表的前半部分都小於後半部分,然後分別對前半部分和後半部分排序,這樣整個列表就有序了。這是一種先進的思想,也是它高效的原因。因為在排序算法中,算法的高效與否與列表中數字間的比較次數有直接的關係,而"保證列表的前半部分都小於後半部分"就使得前半部分的任何一個數從此以後都不再跟後半部分的數進行比較了,大大減少了數字間不必要的比較。但查找數據得另當別論了。
基數排序
基數排序(radix sort)屬於“分配式排序”(distribution sort),又稱“桶子法”(bucket sort)或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的
元素分配至某些“桶”中,藉以達到排序的作用,
基數排序法是屬於穩定性的排序,其
時間複雜度為O (nlog(r)m),其中r為所採取的基數,而m為堆數,在某些時候,基數排序法的效率高於其它的穩定性排序法。