排序演算法的分類如下:
1.插入排序(直接插入排序、折半插入排序、希爾排序);
2.交換排序(冒泡泡排序、快速排序);
3.選擇排序(直接選擇排序、堆排序);
4.歸併排序;
5.基數排序。
關於排序方法的選擇:
(1)若n較小(如n≤50),可採用直接插入或直接選擇排序。
當記錄規模較小時,直接插入排序較好;否則因為直接選擇移動的記錄數少於直接插人,應選直接選擇排序為宜。
(2)若檔案初始狀態基本有序(指正序),則應選用直接插人、冒泡或隨機的快速排序為宜;
(3)若n較大,則應採用時間複雜度為o(nlgn)的排序方法:快速排序、堆排序或歸併排序。
[b] 氣泡排序----交換排序的一種[/b]
效能:比較次數o(n^2),n^2/2;交換次數o(n^2),n^2/4
public int bubblesort(int data, string sorttype)
} else if (sorttype.equals("desc")) }}
}return data;
}
[b] 直接選擇排序法----選擇排序的一種[/b]
方法:每一趟從待排序的資料元素中選出最小(或最大)的乙個元素, 順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。
效能:比較次數o(n^2),n^2/2
交換次數o(n),n
交換次數比氣泡排序少多了,由於交換所需cpu時間比比較所需的cup時間多,所以選擇排序比氣泡排序快。
但是n比較大時,比較所需的cpu時間佔主要地位,所以這時的效能和氣泡排序差不太多,但毫無疑問肯定要快些。
public int selectsort(int data, string sorttype)
} else if (sorttype.equals("desc"))
}swap(data, data.length - i, index);}}
return data;
}
[b] 插入排序[/b]
方法:將乙個記錄插入到已排好序的有序表(有可能是空表)中,從而得到乙個新的記錄數增1的有序表。
效能:比較次數o(n^2),n^2/4
複製次數o(n),n^2/4
比較次數是前兩者的一般,而複製所需的cpu時間較交換少,所以效能上比氣泡排序提高一倍多,而比選擇排序也要快。
public int insertsort(int data, string sorttype) else if (sorttype.equals("desc"))}}
}}return data;
}
[b] 快速排序[/b]
快速排序使用分治法(divide and conquer)策略來把乙個序列(list)分為兩個子串行(sub-lists)。
步驟為:
1. 從數列中挑出乙個元素,稱為 "基準"(pivot),
2. 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割之後,該基準是它的最後位置。這個稱為分割(partition)操作。
3. 遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
遞迴的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞迴下去,但是這個演算法總會結束,因為在每次的迭代(iteration)中,它至少會把乙個元素擺到它最後的位置去。
private int quicksort(int data, int low, int high)
if (i < j)
while (i < j && data[i] > x)
if (i < j)
}data[i] = x;
quicksort(data, low, i - 1);
quicksort(data, i + 1, high);
}return data;
}
java實現的排序演算法總結
網上查了好多資料,不同排序演算法的實現可能有多種,但網上有一些放到 中無法執行,各種錯誤,並且有些並不是最優演算法,以下為本人整理的比較靠譜的 1 快速排序 public class quicksort i low j hight index a i 用子表的第乙個記錄做基準 while i j a...
排序演算法總結及java實現
十種排序演算法的基本特性 排序演算法 平均時間複雜度 最好情況 最壞情況 空間複雜度 排序方式 穩定性快速排序 nlogn nlogn n2 logn in place 不穩定歸併排序 nlogn nlogn nlogn n out place 穩定堆排序 nlogn nlogn nlogn 1 i...
常用排序演算法總結 選擇排序 java實現
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如果某...