#!/usr/bin/python
#coding=utf8
'''
time 2015.05.16
refer http://blog.csdn.net/bestwolf1983/article/details/9157621
'''
def sort_positive_negative(data_list):
'''
@brief:将數組裡的負數排在數組的前面,正數排在數組的後面,但不改變原先負數和正數的排列順序;時間複雜度為o(n^2),空間複雜度為o(1)
@param data_list:待排序的數組
@return:None
'''
print(data_list)
length = len(data_list)
head = 0 #自然數開始的下标
while data_list[head] <= 0: #找到第一個自然數
head += 1
tail = head + 1 #已經有序的自然數後面的負數的下标
while head < length:
while data_list[tail] >= 0: #找到有序自然數後面的第一個負數
if tail == length - 1:
break
tail += 1
if data_list[tail] >= 0: #如果找不到負數,那麼數組已經有序
break
temp = data_list[tail] #儲存負數
for i in xrange(tail, head, -1): #循環後移已有序的自然數,為負數騰出空間
data_list[i] = data_list[i-1]
data_list[head] = temp #将負數填充到最終的位置,一次循環會确定一個負數的最終位置
head += 1
print(data_list)
'''
@brief:将數組裡的負數排在數組的前面,正數排在數組的後面,但不改變原先負數和正數的排列順序;時間複雜度為o(n),空間複雜度為o(1)
@param data_list:待排序的數組
@return:None
'''
def sort_positive_negative1(data_list):
i = 0
j = len(data_list)-1
while(i < j):
while i < j:
if data_list[i] >= 0:
break
else:
i = i + 1
while i < j:
if data_list[j] <= 0:
break
else:
j = j -1
r = data_list[i]
data_list[i] = data[j]
data_list[j] = r
print data_list
if __name__ == "__main__":
data_list = [-5, 2, -3, 4, -8, 0, -9, 1, 3, -10, 22, 33, 44, 55, -10]
sort_positive_negative(data_list)