import random
import time
def create_array():
i = 0
a = []
while i < 1000:#为数组指定随机生成整数并追加
a.append(random.randint(0,1000))
i += 1
return a
def quick_sort(array, l, r):
if l > r:
return
i, j = l, r#使用i,j临时保存左右的下标
temp = array[l]
while i != j:#如果左边不等于右边,进行循环遍历
while array[j] >= temp and i < j:#如果右边的数大于等于基数且i小于j,当碰到小于基数的数时停止
j -= 1#右下标向左前进一位
#print('r:{}'.format(array))
while array[i] <= temp and i < j:#如果左边的数小于等于基数且i小于j,当碰到大于基数的数时停止
i += 1#左下标向右前进一位
#print('l:{}'.format(array))
if i < j:#如果i小于j,说明右边有小于基数的数,左边有大于基数的数,将俩数交换位置,然后重复上述的操作,直到i==j
a[l], a[r] = a[r], a[l]
#一轮结束,将基数与i与j相遇的值交换
a[l] = a[i]
a[i] = temp
quick_sort(array, l, i-1);#继续处理左边的,这里是一个递归的过程
quick_sort(array, i+1, r);#继续处理右边的 ,这里是一个递归的过程
if __name__ == '__main__':#时间复杂度O(NlogN),本代码有问题,数值太多就会超过最大递归深度
print(time.asctime(time.localtime(time.time())))
a = create_array()
#a = [10, 5, 9]
print(a)
quick_sort(a, 0, len(a)-1)
print(a)
print(time.asctime(time.localtime(time.time())))
以下是算法导论中的快排,刚开始学Python,学起来还是有点困难,哈哈
import random
import time
def create_array():
i = 0
a = []
while i < 1000000:#为数组指定随机生成整数并追加
a.append(random.randint(0,1000000))
i += 1
return a
def quick_sort(array, l, r):
if l < r:
q = partition(array, l, r)
quick_sort(array, l, q - 1)
quick_sort(array, q + 1, r)
def partition(array, l, r):#100万随机数需要9秒
x = array[r]#将最右边的数作为基数
i = l - 1
for j in range(l, r):#让俩个数,从l向r-1依次递增
if array[j] <= x:#如果当前值小于等于基数
i += 1
array[i], array[j] = array[j], array[i]#
array[i + 1], array[r] = array[r], array[i+1]
return i + 1
if __name__ == '__main__':#时间复杂度O(N平方)
print(time.asctime(time.localtime(time.time())))
a = create_array()
print(a)
quick_sort(a, 0, len(a)-1)
print(a)
print(time.asctime(time.localtime(time.time())))
好了,掰掰~~