#!/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
合併陣列並刪除其中重複元素
1.開局篇 合併陣列並刪除陣列中相同的元素 這是我的第一篇部落格,起初是為了完成一項工作任務,即把兩個陣列合併,並且去掉其中相同的元素。後來想,為何不把這個過程記錄一下,既方便未來自己使用 查閱,也可以給大家提供一些方便和思路。首先說明,我並不是計算機內行出身,所以很多基礎和思路可能不是那麼標準,如...
鍊錶刪除重複元素1,刪除重複元素2,
刪除排序鍊錶中的重複元素 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 1 輸入 1 1 2 輸出 1 2 示例 2 輸入 1 1 2 3 3 輸出 1 2 3 思路 很簡單。先將兩個指標進行操作,start,end然後判斷end是否等於空即可 definition for s...
STL vector刪除重複元素
stl提供了很多實用的演算法,這裡主要講解sort和unique演算法。刪除重複元素,首先將vector排序。sort vecsrc.begin vecsrc.end 然後使用unique演算法。vecsrc.erase unique vecsrc.begin vecsrc.end vecsrc.e...