2.3.1 冒泡排序
2.2 选择排序
核心思惟:每一趟扫描时,大年夜待排序的数据元素中选出关键码最小或最大年夜的一个元素,次序放在已经排好次序序列的最后,直到全部待排序的数据元素排完为止。
2.2.1 直接选择排序
核心思惟:给每个位制揭捉?择关键码最小的数据元素,即:选择最小的元素与第一个地位的元故旧换,然后在剩下的元素中再选择最小的与第二个地位的元故旧换,直到倒数第二个元素和最后一个元素比较为止。
根据其根本思惟,每当扫描一趟时,如不雅当前元素比一个元素小,并且这个小元素又涌如今一个和当前元素相等的元素后面,则它们的地位产生了交换,所以直接选择排序时不稳定的,当时光复杂度为平方阶O(n2),空间复杂度为O(l)。
2.2.2 堆排序
堆排序时对直接选择排序的一种有效改进。
- #-------------------------直接选择排序-------------------------------
- def select_sort(data_list):
- #依次遍历序列中的每一个元素
- for i in range(0, len(data_list)):
- #将当前地位的元素定义此轮轮回傍边的最小值
- minimum = data_list[i]
- #将该元素与剩下的元素依次比较寻找最小元素
- for j in range(i+1, len(data_list)):
- if data_list[j] < minimum:
- temp = data_list[j];
- data_list[j] = minimum;
- minimum = temp
- #将比较后获得的┞锋正的最小值赋值给当前地位
- data_list[i] = minimum
核心思惟:将所有的数据建成一个堆,最大年夜的数据在堆顶,然后将堆顶的数据元素和序列的最后一个元故旧换;接侧重建堆、交换数据,依次下去,大年夜而实现对所有的数据元素的排序。完成堆排序须要履行两个动作:建堆和堆的调剂,如斯反复进行。
堆排序有可能会使得两个雷同值的元素地位产生交换,所所以不稳定的,其平均时光复杂度为0(nlog2n),空间复杂度为O(l)。
Python源代码:
- #-------------------------堆排序--------------------------------
- #**********获取阁下叶子节点**********
- def LEFT(i):
- return 2*i + 1
- def RIGHT(i):
- return 2*i + 2
- #********** 调剂大年夜顶堆 **********
- #data_list:待调剂序列 length: 序列长度 i:须要调及?结点
- def adjust_max_heap(data_list,length,i):
- #定义一个int值保存当前序列最大年夜值的下标
- largest = i
- #履行轮回操作:两个义务:1 寻找最大年夜值的下标;2.最大年夜值与父节点交换
推荐阅读
Android中内存优化的那些事 - 一个有关图片的优化记录
客服群里叫唤着:这个用户图片不显示了,那个用户图片也不显示了。我拿着手上一切正常的测试机,what the hell……默默地打开bugly。 满园春色关不住,遍地内存溢出来!是的,>>>详细阅读
本文标题:常用排序算法比较与分析
地址:http://www.17bianji.com/lsqh/35003.html
1/2 1