题目11:数组逆序输出
>>> a=[9,6,5,4,1]
>>> N=len(a)
>>> print a
>>> for i in range(len(a)/2):
a[i],a[N-i-1]=a[N-i-1],a[i]
>>> print a
[1, 4, 5, 6, 9]
题目12:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+。。。。+1/n,当输入n为奇数时,调用函数1/1+1/3+。。。。+1/n(利用指针函数)
def peven(n):
i=0
s=0.0
fori in range(2,n+1,2):
s+=1.0/i
return s
def podd(n):
s=0.0
fori in range(1,n+1,2):
s+=1.0/i
return s
def dcall(fp,n):
s=fp(n)
return s
if __name__=='__main__':
n=int(raw_input('enter a number:'))
ifn%2==0:
sum=dcall(peven,n)
else:
sum=dcall(podd,n)
print sum
题目13:冒泡排序法
def bubbleSort(numbers):
for j in xrange(len(numbers),-1,-1):
for i in xrange(0,j-1,1):
if numbers[i] > numbers[i+1]:
numbers[i],numbers[i+1] =numbers[i+1],numbers[i]
print numbers
def main():
numbers = [23,12,9,15,6]
bubbleSort(numbers)
if __name__ == '__main__':
main()
题目14:冒泡排序算法实现方法2
array=[1,2,5,3,6,8,4]
for i in range(len(array)-1,1,-1):
for j in range(0,i):
if array[j]>array[j+1]:
array[j],array[j+1]=array[j+1],array[j]
print array
题目15:快速排序算法python实现
快速排序的基本思想是基于分治策略的。对于输入的子序列L[p..r],如果规模足够小则直接进行排序,否则分三步处理:
1分解(Divide):将输入的序列L[p..r]划分成两个非空子序列L[p..q]和L[q+1..r],使L[p..q]中任一元素的值不大于L[q+1..r]中任一元素的值。
2递归求解(Conquer):通过递归调用快速排序算法分别对L[p..q]和L[q+1..r]进行排序。
3合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在L[p..q]和L[q+1..r]都排好序后不需要执行任何计算L[p..r]就已排好序。
import random
import copy
numbers1 = random.sample(range(100), 10)
numbers2 = copy.copy(numbers1)
#numbers1 = [16, 23, 91, 84, 9, 56, 71, 65,12, 99]
#numbers2 = [16, 23, 91, 84, 9, 56, 71, 65,12, 99]
print numbers1
def partition(numbers, left, right):
i= left
for j in range(left, right):
if numbers[j] <= numbers[right]:
numbers[i], numbers[j] = numbers[j], numbers[i]
i += 1
numbers[i], numbers[right] = numbers[right], numbers[i]
return i
def partition2(numbers, left,right):
low = left
high = right - 1
while low < high:
while low < right and numbers[low] <= numbers[right]:
low += 1
while high >= left and numbers[high] >= numbers[right]:
high -= 1
if low < high:
numbers[low], numbers[high] = numbers[high], numbers[low]
numbers[low], numbers[right] = numbers[right], numbers[low]
return low
def quickSort(numbers, left, right,partition_func=None):
if left < right:
if partition_func:
middle = partition_func(numbers, left, right)
else:
middle = partition(numbers, left, right)
quickSort(numbers, left, middle - 1)
quickSort(numbers, middle + 1, right)
quickSort(numbers1, 0, len(numbers1) - 1)
print numbers1
quickSort(numbers2, 0, len(numbers2) - 1,partition2)
print numbers2