学习python之路---python小算法总结(三)

题目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

print

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值