排序並刪除重複元素

2021-08-18 02:53:08 字數 1748 閱讀 6816

#!/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...