author: neumanndong
date: 2017/4/10 9:21
快速排序(Quick Sort):通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对着两部分记录继续进行排序,以达到整个序列有序。
c语言:
int Partition(SqList & L, int low, int high){
pivotkey = L.r[low].key;
while(low < high){
while(low < high && L.r[high].key >= pivotkey) --high
L.r[low]-L.r[high];
while(low < high && L.r[low].key <= pivotkey) ++low
L.r[low]-L.r[high];
}
return low
}
java版本:
public class Test {
public static int Partition(int SqList[], int low, int high) {
int pivotkey = SqList[low];
while (low < high) {
while (low < high && SqList[high] >= pivotkey)
--high;
SqList[low] = SqList[high];
while (low < high && SqList[low] <= pivotkey)
++low;
SqList[high] = SqList[low];
}
SqList[low] = pivotkey;
return low;
}
public static void QSort(int SqList[], int low, int high) {
if (low < high) {
int pivotloc = Partition(SqList, low, high);
QSort(SqList, low, pivotloc - 1);
QSort(SqList, pivotloc + 1, high);
}
}
public static void QuickSort(int SqList[]) {
QSort(SqList, 0, SqList.length - 1);
}
public static void main(String[] args) {
int arr[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
QuickSort(arr);
System.out.println("\n排序之后:");
for (int element : arr) {
System.out.print(element + " ");
}
}
}
python版本:
def Partition(SqList, low, high):
pivotkey = SqList[low]
while(low < high):
while(low < high and SqList[high] >= pivotkey):
high -= 1
SqList[low] =SqList[high]
while(low < high and SqList[low] <= pivotkey):
low += 1
SqList[high] = SqList[low]
SqList[low] = pivotkey
return low
def QSort(SqList, low, high):
if(low < high):
pivotloc = Partition(SqList, low, high)
QSort(SqList, low, pivotloc - 1)
QSort(SqList,pivotloc+1, high)
def QuickSort(SqList):
QSort(SqList,0,len(SqList)-1)
if __name__ == "__main__":
SqList = [49, 38, 65, 97, 76, 13, 27, 49]
QuickSort(SqList)
for i in SqList:
print i
不稳定排序
时间复杂度:最好 o(nlog2n) 最坏 o(n*n) 平均o(nlog2n)
*********************************************************************************
Have courage ,and be kind
坚强而勇敢,仁慈而善良