快速排序

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

坚强而勇敢,仁慈而善良

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值