题目:给定一个长度为2n的序列,要求奇数位放奇数,偶数位放偶数
解题:双指针,分别按步长2进行走,当同时偶数位遇到奇数,奇数位遇到偶数时,进行交换,指针均向后移动
算法代码
#!/usr/bin/env python # -*- coding: utf-8 -*- def oddsort(data): size = len(data) if not data or size < 2: return data odd = even = 0 for i in data: if i % 2 == 0: even += 1 else: odd += 1 if odd != even: return '序列奇数偶数数量不同,无法排序' i = 0 j = 1 while True: while i < size and data[i] % 2 == 0: i += 2 while j < size and data[j] % 2 != 0: j += 2 if i >= size or j >= size: break tmp = data[i] data[i] = data[j] data[j] = tmp i += 2 j += 2 return data # 测试用例 data = [] print(oddsort(data)) data = [2,1,7,12,9] print(oddsort(data)) data1 = [2,1,7,12,6,9] print(oddsort(data1)) data2 = [2,1,7,12,9,6] print(oddsort(data2)) # 输出 [] 序列奇数偶数数量不同,无法排序 [2, 1, 12, 7, 6, 9] [2, 1, 12, 7, 6, 9]