#!/usr/bin/python
# -*- coding: UTF-8 -*-
def select_sort(lst):
left,right = 0,len(lst)
while left < right:
p,i = left,left+1
while i < right:
if lst[i] == lst[p]: #覆盖重复元素,数组长度减一,即右边界左移一位
lst[i] = lst[right-1]
right -= 1
elif lst[p] > lst[i]: #将p定位到更小的元素
p = i
i += 1
else:
i += 1
if p != left: #将最小值交换到左侧
lst[p],lst[left] = lst[left],lst[p]
left += 1 #左边界右移一位
print lst
del lst[right:] #删除多余的元素
def insert_sort(lst):
def insert_pos(x,left,right):
while left <= right:
mid = (left + right) // 2
if lst[mid] > x:
right = mid - 1
else:
left = mid + 1
return left
i,right = 1,len(lst)
while i < right:
t = lst[i]
p = insert_pos(t,0,i-1) #寻找插入位置
if p > 0 and lst[p-1] == t: #覆盖重复元素,数组长度减一
lst[i] = lst[right-1]
right -= 1
else:
for j in range(i,p,-1): #元素右移,腾出插入位置
lst[j] = lst[j-1]
lst[p] = t
i += 1
print lst
del lst[right:] #删除多余的元素
def bubble_sort(lst):
left,right = 0,len(lst)-1
while left < right:
for i in range(right,left,-1):
if lst[i] == lst[i-1]: #覆盖重复元素,数组长度减一,即右边界左移一位
lst[i] = lst[right]
right -= 1
elif lst[i] < lst[i-1]: #向左冒泡
lst[i],lst[i-1] = lst[i-1],lst[i]
left += 1 #左边界右移一位
print lst
del lst[right+1:] #删除多余的元素
a = [3,3,1,2,1,4,1,3,5,1]
select_sort(a)
print a
a = [3,3,1,2,1,4,1,3,5,1]
insert_sort(a)
print a
a = [3,3,1,2,1,4,1,3,5,1]
bubble_sort(a)
print a
排序并删除重复元素
最新推荐文章于 2020-11-21 19:51:45 发布