常見的排序分為兩類,一類是內部排序(直接插入排序、希爾排序、簡單選擇排序、堆排序、氣泡排序、快速排序、歸併排序、基數排序),一類是外部排序。
當n較大時,應該使用時間複雜度為o(nlog2n)的排序,如快速排序、堆排序、歸併排序。
快排是基於比較的內部排序中,最好的方法。
假設陣列為r[0]-r[n-1],第一次首先用r[0]與r[1]-r[n-1]比較,若發現有比r[0]小的值則記錄下來,之後的與記錄下來的值比較,當第一次完成後,將最後被記錄的值與r[0]互換位置;第二次用r[1]與r[2]-r[n-1]比較,由此往復,最終得到排序後的陣列。
package com.demo.main;
/** * 直接插入排序
*/public class straightinsertionsort ;
for(int i = 0;i < arr.length-1; i++)
}if(temp != i)
}for(int value : arr)
}}
時間複雜度:o(n^2).
假設陣列為r[0]-r[n-1],並取乙個增量s(1<=s第一次從r[0]開始進行增量為s進行直接插入排序。
第二次先將s/2,如果s>1,則從r[1]開始進行增量為s的直接插入排序。
重複以上步驟,知道s<1跳出迴圈。
/**
* 希爾排序
*/public class shellssort ;
//增量
int incrementnum = arr.length/2;
while(incrementnum >=1)
}if(temp != i)
}//設定新的增量
incrementnum = incrementnum/2;
}for(int value : arr)
}}
希爾排序是再直接插入排序的基礎上進行的優化,但希爾排序時效分析很難。 九大排序演算法
重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,故名。package com.demo.main 氣泡排序 public c...
排序演算法 九大排序演算法總結
參考部落格 排序演算法 直接插入排序 時間複雜度 空間複雜度 o 1 穩定性 穩定 參考部落格 排序演算法 希爾排序 時間複雜度 空間複雜度 o 1 穩定性 不穩定 參考部落格 排序演算法 選擇排序 時間複雜度 空間複雜度 o 1 穩定性 不穩定 參考部落格 排序演算法 堆排序 時間複雜度 空間複雜...
演算法 九大排序演算法總結
這裡我不採用陣列來進行排序,而是採用更加符合應用的資料結構來排序。define m 100 typedef int datatype typedef struct nodetable 這是一種簡單描述,更加詳細的資料機構應該是下面這樣 但是為了方便描述還是使用上面的簡單結構 define m 100...