常见排序算法-Python实现
时间:2022-04-23
本文章向大家介绍常见排序算法-Python实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
常见排序算法-Python实现
python
排序
算法
1.二分法
python 32行
#coding=utf-8
def binary_search(input_array, value):
"""Your code goes here."""
length = len(input_array)
left = 0
right = length-1
if length == 1:
return 0 if value == input_value[0] else -1
else:
mid = (left+right)/2
while(right-left>1):
if input_array[mid] == value:
return mid
elif input_array[mid] > value:
right = mid
mid = (left+right)/2
else:
left = mid
mid = (left+right)/2
if input_array[left] == value:
return left
elif input_array[right] == value:
return right
else:
return -1
test_list = [1,3,9,11,15,19,29]
test_val1 = 25
test_val2 = 15
print (binary_search(test_list, test_val1))
print (binary_search(test_list, test_val2))
2.冒泡法
python 60行
#coding=utf-8
# way=1递增排序 way=0递减排序
def bubble_sort(array,way=1):
length = len(array)
if not length:
print("Error!The length of array must be greater than 0.n")
return 'Wrong array'
if way == 1:
while length > 0:
for i in range(length-1):
if array[i] > array[i+1]:
array[i],array[i+1] = array[i+1],array[i]
length -= 1
return array
elif way == 0:
while length > 0:
for i in range(length-1):
if array[i] < array[i+1]:
array[i],array[i+1] = array[i+1],array[i]
length -= 1
return array
# 加入排序判断标志,可提高运行效率
# way=1递增排序 way=0递减排序
def better_bubble_sort(array,way=1):
is_sorted = True # 判断记录上次遍历是否进行过交换,若没有则表示不用再遍历了
length = len(array)
if not length:
print("Error!The length of array must be greater than 0.n")
return 'Wrong array'
if way == 1:
while length > 0 and is_sorted:
for i in range(length-1):
is_sorted = False
if array[i] > array[i+1]:
array[i],array[i+1] = array[i+1],array[i]
is_sorted = True
length -= 1
return array
elif way == 0:
while length > 0 and is_sorted:
for i in range(length-1):
is_sorted = False
if array[i] < array[i+1]:
array[i],array[i+1] = array[i+1],array[i]
is_sorted = True
length -= 1
return array
test = [21, 4, 1, 3, 9, 20, 25, 6, 21, 14]
print(better_bubble_sort(test,1))
3.插入排序
python 19行
#coding=utf-8
def insert_sort(array):
length = len(array)
flag = array[0]
for x in range(1,length):
# 之前的
if array[x] < array[x-1]:
flag = array[x]
y = x
while y != 0 and array[y-1] > flag :
array[y] = array[y-1]
y -= 1
array[y] = flag
return array
test = [21, 4, 1, 3, 9, 20, 25, 20, 3]
print(insert_sort(test))
4.归并排序
python 31行
#coding=utf-8
def merge_sort(array):
if len(array) <= 1:
return array
split_index = len(array)/2
left = merge_sort(array[:split_index])
right = merge_sort(array[split_index:])
return merge(left,right)
def merge(left,right):
i = 0
j = 0
result = []
while i < len(left) and j < len(right):
if left[i] <= right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += (left[i:])
result += (right[j:])
return result
a = [1,2]
test = [21, 4, 1, 3, 9, 20, 25]
print(merge_sort(test))
5.选择排序
python 16行
#coding=utf-8
def select_sort(array):
length = len(array)
# mini = array[0]
for i in range(length):
mini = array[i]
for j in range(i,length):
if array[j] < mini:
mini = array[j]
array[i],array[j] = array[j],array[i]
return array
test = [21, 4, 1, 3, 9, 20, 25, 20, 3]
print(select_sort(test))
6.快速排序
python 26行
#coding=utf-8
# 递归
def quick_sort(lists, left, right):
# 快速排序
if left >= right:
return lists
key = lists[left]
low = left
high = right
while left < right:
while left < right and lists[right] >= key:
right -= 1
lists[left] = lists[right]
while left < right and lists[left] <= key:
left += 1
lists[right] = lists[left]
lists[right] = key
quick_sort(lists, low, left - 1)
quick_sort(lists, left + 1, high)
return lists
test = [21, 4, 1, 3, 9, 20, 25, 6, 21, 14]
print (quick_sort(test,0,len(test)-1))
written by MARSGGBO 2017-2-14
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php+js实现的无刷新下载文件功能示例
- Android如何获取视频首帧图片
- PHP单文件上传原理及上传函数的封装操作示例
- php中错误处理操作实例分析
- Android 百度地图定位实现仿钉钉签到打卡功能的完整代码
- Thinkphp5框架实现图片、音频和视频文件的上传功能详解
- Android使用Opengl录像时添加水印
- Laravel使用Queue队列的技巧汇总
- Thinkphp5框架ajax接口实现方法分析
- android MediaRecorder实现录屏时带录音功能
- php根据地址获取百度地图经纬度的实例方法
- Android 代码一键实现银行卡绑定功能
- Android 通过cmake的方式接入opencv的方法步骤
- Yii框架响应组件用法实例分析
- Android开发学习实现简单计算器