几种常用的排序算法(一)--python实现

1. 选择排序,时间复杂度O(n^2),算法不稳定。

    思路:(1)循环整个数组 arr,选出最大的数,将它放在空数组 new_arr 的第一个位置。

               (2)将刚刚选出的数字从 arr 中去掉。

               (3)循环前两个步骤,直到 arr 中没有数字。

下面我写了两个函数,当然写在一起也是可以的。

# -*- coding:utf-8 -*-
#查找到数组中最大数的下标
def find_biggest(arr):
	biggest = arr[0]  #biggest用来储存数组中最大的数
	big_index = 0
	for i in range(1, len(arr)):
		if arr[i] > biggest:
			biggest = arr[i]
			big_index = i
	return big_index

#选择排序 时间复杂度O(n*n)
def select_sort(arr):
	new_arr = []
	for i in range(0,len(arr)):
		temp = find_biggest(arr)
		new_arr.append(arr[temp])
		arr.pop(temp)
	return new_arr

#测试
arr = [0, 1, 3, 5, 8 ,6 ,7, 9]
print(arr[find_biggest(arr)]) 
print(select_sort(arr)) 

2. 快速排序,时间复杂度O(n*logn),算法不稳定。

    思路:分而治之,采用递归。 首先在数组中随机选择一个数作为基准(pivot),然后将数组分成两部分,小于基准的为一部分, 

               其余的为另一个部分。然后对形成的两个数组采用相同的办法,直到被分成数组中的元素小于数小于2.

               结束递归的条件,就是数组中的元素数小于2. 

# -*- coding:utf-8 -*-
# 快速排序,分而治之,是为递归
def quick_sort(arr):
	if len(arr) < 2:
		return arr
	else:
		pivot = arr[0]
		# 列表生成式
		small = [ i for i in arr[1:] if i < pivot ]
		big = [ i for i in arr[1:] if i > pivot ]
	return quick_sort(small) + [pivot] + quick_sort(big)

#测试
arr = [1, 4,7, 2, 5, 8, 3, 6, 9]
print(quick_sort(arr)) 
3. 冒泡排序,时间复杂度O(n^2),算法稳定。

     思路:将数组第一个元素,与其后所有元素比较,若第一个元素大于后面某个元素,则交换两者,循环一遍找最小的元素且放在               

                了第 一 个位置。

                同样循环比较所有的元素,则排序完成。

# -*- coding:utf-8 -*-
#冒泡排序
def change_sort(arr):
	for i in range(len(arr)) :
		for j in range(i+1, len(arr)) :
			if arr[i] > arr[j]:
				temp = arr[i]
				arr[i] = arr[j]
				arr[j] = temp
	return arr

#测试	
arr = [1, 4, 7, 2, 5, 8, 3, 6, 9]
print(change_sort(arr))
4.直接插入排序,时间复杂度O(n^2),算法稳定

   思路:在插入新的一个元素时,他前面的元素已经排好序,所以只需要找到他自己的位置插入便可以了。

              在实际操作中,我们将第一个元素作为已经排好序的数组,逐步插入数组中其他的元素。

              首先,总体上要将第二个元素到最后一个元素都插入,所以要有个循环。 然后,在一次循环中要找到插入位置,

              我们将要插入的元素,前一个元素比较,如果小于前一个元素,则将前一个元素后移一位,但是此时不要将要插入

              直接插入,要与在前一个元素比较,循环如此,直到比较到第一个元素,或者要插入的元素大于比较的元素,此时

              将要插入的元素直接插入。

# -*- coding:utf-8 -*-
# 直接插入排序
def insert_sort(arr):
	if len(arr) < 2:
		return  arr
	for i in range(1, len(arr)):
		if arr[i] < arr[i-1]:
			temp = arr[i]
			j = i - 1
			while j >= 0 and temp < arr[j]:
				arr[j+1] = arr[j]
				j = j - 1
			arr[j+1] = temp
	return arr

#测试
arr = [1, 4, 7, 2, 5, 8, 3, 6, 9]
print(insert_sort(arr))
			 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值