for (i=1; i<=n; i++) x++; for (i=1; i<=n; i++) for (j=1; j<=n; j++) x++;
def bubble(array): for i in range(len(array)-1): for j in range(len(array)-1-i): if array[j] > array[j+1]: # 如果前一个大于后一个,则交换 temp = array[j] array[j] = array[j+1] array[j+1] = temp if __name__ == "__main__": array = [265, 494, 302, 160, 370, 219, 247, 287, 354, 405, 469, 82, 345, 319, 83, 258, 497, 423, 291, 304] print("------->排序前<-------") print(array) bubble(array) print("------->排序后<-------") print(array)
def select_sort(array): for i in range(len(array)-1): # 找出最小的数放与array[i]交换 for j in range(i+1, len(array)): if array[i] > array[j]: temp = array[i] array[i] = array[j] array[j] = temp if __name__ == "__main__": array = [265, 494, 302, 160, 370, 219, 247, 287, 354, 405, 469, 82, 345, 319, 83, 258, 497, 423, 291, 304] print(array) select_sort(array) print(array)
import time def insertion_sort(array): for i in range(1, len(array)): # 对第i个元素进行插入,i前面是已经排序好的元素 position = i # 要插入数的下标 current_val = array[position] # 把当前值存下来 # 如果前一个数大于要插入数,则将前一个数往后移,比如5,8,12,7;要将7插入,先把7保存下来,比较12与7,将12往后移 while position > 0 and current_val < array[position-1]: array[position] = array[position-1] position -= 1 else: # 当position为0或前一个数比待插入还小时 array[position] = current_val if __name__ == "__main__": array = [92, 77, 67, 8, 6, 84, 55, 85, 43, 67] print(array) time_start = time.time() insertion_sort(array) time_end = time.time() print("time: %s" % (time_end-time_start)) print(array)
def quick_sort(array, left, right): ''' :param array: :param left: 列表的第一个索引 :param right: 列表最后一个元素的索引 :return: ''' if left >= right: return low = left high = right key = array[low] # 第一个值,即基准元素 while low < high: # 只要左右未遇见 while low < high and array[high] > key: # 找到列表右边比key大的值 为止 high -= 1 # 此时直接 把key跟 比它大的array[high]进行交换 array[low] = array[high] array[high] = key while low < high and array[low] <= key: # 找到key左边比key大的值,这里为何是<=而不是<呢?你要思考。。。 low += 1 # 找到了左边比k大的值 ,把array[high](此时应该刚存成了key) 跟这个比key大的array[low]进行调换 array[high] = array[low] array[low] = key quick_sort(array, left, low-1) # 最后用同样的方式对分出来的左边的小组进行同上的做法 quick_sort(array,low+1, right) # 用同样的方式对分出来的右边的小组进行同上的做法 if __name__ == '__main__': array = [8,4,1, 14, 6, 2, 3, 9,5, 13, 7,1, 8,10, 12] print("-------排序前-------") print(array) quick_sort(array, 0, len(array)-1) print("-------排序后-------") print(array)
输出:
-------排序前-------
[8, 4, 1, 14, 6, 2, 3, 9, 5, 13, 7, 1, 8, 10, 12]
-------排序后-------
[1, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 12, 13, 14]
22行那里如果不加=号, 当排序64,77,64是会死循环,此时key=64, 最后的64与开始的64交换,开始的64与本最后的64交换…… 无穷无尽
直接插入排序复杂度:
时间复杂度: 最好情况O(nlogn), 最坏情况O(n^2), 平均情况O(nlogn)
下面空间复杂度是看别人博客的,我也不大懂了……改天再研究下。
最优的情况下空间复杂度为: O(logn);每一次都平分数组的情况
最差的情况下空间复杂度为: O( n );退化为冒泡排序的情况
稳定性: 不稳定
快速排序效果:
以上就是常见python中排序的代码详解的详细内容,更多请关注Gxl网其它相关文章!
查看更多关于常见python中排序的代码详解的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did82401