python实现的几种排序算法

深碍√TFBOYSˉ_ 2022-06-11 06:19 299阅读 0赞

排序算法

插入排序

  1. '''
  2. 此算法为插入排序中的
  3. 直接插入排序
  4. 当然这是对于n很小的情况,但是当n很大的时候,可以用折半插入
  5. 就是对于直接插入排序的一个改进,对于前一个序列用直接插入排序
  6. 后面就不用这样了,因为前面已经是一个有序序列,可以折半方式提高
  7. 查询效率
  8. '''
  9. a=[]
  10. b=None
  11. #插入列表
  12. insert_list=[7,3,5,67,3,6,8]
  13. #插入的数
  14. #扩展列表
  15. N=None
  16. def expand_list():
  17. # for i in range(1,join_nuber):
  18. a.append(b)
  19. #得到要插入的数据
  20. def insert_number(insert_list):
  21. return insert_list.pop()
  22. #得到插入的位置
  23. def position(N):
  24. min=N
  25. i=0
  26. while True:
  27. if( i<(len(a)-1) and min<=a[i]):
  28. j=i
  29. return j
  30. i=i+1
  31. if(i==(len(a)-1)):
  32. return len(a)-1
  33. #数据插入
  34. def insert(a,insert_list):
  35. while (len(insert_list)!=0):
  36. N=insert_number(insert_list)
  37. print("this moment the value of N",N)
  38. print("a",a)
  39. if (len(a)==0):
  40. expand_list()
  41. a[0]=N
  42. else:
  43. expand_list()
  44. print("a",a)
  45. print("len a",len(a))
  46. print("position",position(N))
  47. for i in range(0,len(a)-position(N)-1):
  48. a[len(a)-1-i]=a[len(a)-2-i]
  49. a[position(N)]=N
  50. insert(a,insert_list)
  51. print(a)#测试代码

选择排序

#选择排序
‘’’
选择排序就是每一次找出最小的那个数
然后和第一个数交换位置

‘’’
# a=[3,4,8,6,3,4,5]

# def select_sort(lists):
# # 选择排序
# count = len(lists)
# for i in range(0, count):
# min = i
# for j in range(i + 1, count):
# if lists[min] > lists[j]:
# min = j
# #在Python中不需要三方参数来实现两个数的交换
# lists[min], lists[i] = lists[i], lists[min]
# return lists

起泡排序

‘’’
起泡排序,通过两两比较
每次找出最大的放在末尾

‘’’
# def bubble_sort(lists):
# # 冒泡排序
# count = len(lists)
# for i in range(0, count):
# for j in range(i + 1, count):
# if lists[i] > lists[j]:
# lists[i], lists[j] = lists[j], lists[i]
# return lists

堆排序

#堆排序
‘’’
堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值

堆排序通过每次找出堆顶元素,来实现排序
‘’’

  1. a=[3,20,9,6]
  2. def adjust_heap(lists, i, size):
  3. lchild = 2 * i + 1
  4. rchild = 2 * i + 2
  5. max = i
  6. print("adjust_heap")
  7. if i < size / 2:
  8. if lchild < size and lists[lchild] > lists[max]:
  9. max = lchild
  10. if rchild < size and lists[rchild] > lists[max]:
  11. max = rchild
  12. if max != i:
  13. lists[max], lists[i] = lists[i], lists[max]
  14. print(lists)
  15. adjust_heap(lists, max, size)
  16. def build_heap(lists, size):
  17. for i in range(0, int(size/2))[::-1]:#此处代码的[::-1]的意思就是从高到低循环,i的值是从最大开始取
  18. adjust_heap(lists, i, size)
  19. def heap_sort(lists):
  20. size = len(lists)
  21. build_heap(lists, size)
  22. for i in range(0, size)[::-1]:
  23. lists[0],lists[i]=lists[i],lists[0] #此代码的作用是将第一个(即堆顶元素放到最后面,)剩下的元素再进行堆排序
  24. #直到取出所有堆顶元素,就完成了排序
  25. adjust_heap(lists, 0, i)
  26. heap_sort(a)
  27. print(a)

#测试代码

到此也差不多了,希望同学们能好好理解一下堆排序,不要觉得难就放弃。生活亦是如此。

发表评论

表情:
评论列表 (有 0 条评论,299人围观)

还没有评论,来说两句吧...

相关阅读