正负数排序

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值