Python学习笔记(三)

用Python将查找和排序算法实现了一下,算是对Python的一个练习。

其实不管是查找还是排序都写了很多遍,但用Python重新写还是花了点时间。因为总是写上if就想打上括号,面对代码块就想用花括号包围,遇到数组就想直接赋值(Python得用insert赋值)。难怪很多书上都说要不断学习新的语言,尤其是差别特别大的语言,这样才可以锻炼编程思维,开拓视野。

import time;
#author:Tammy Pi
#function:用Python对插入和排序算法进行练习

arr = [809,834,477,478,307,122,96,102,234,476];

#线性查找,如果找到了就返回下标,否则返回-1
def line_search(x):
    for i in range(0,len(arr)):
        if arr[i]==x:
            return i;
    return -1;

t1 = time.time();
print(line_search(96));
t2 = time.time();
print("花费时间:"+str((t2-t1)*1000));


arr1 = [1,3,5,7,9];
#对于有序的数组查找,利用二分查找法
def binary_search(x,start,end):
    if start<=end:
        middle = int((start+end)/2);
        if x<arr1[middle]:
            return binary_search(x,start,middle-1);
        elif x>arr1[middle]:
            return binary_search(x,middle+1,end);
        else:
            return middle;
    return -1;

print("二分查找:"+str(binary_search(7,0,len(arr1)-1)));

arr2 = [3,5,7,6,1];

#插入排序与选择排序结合
def my_sort(arr2):
    for i in range(0,len(arr2)-1):
            #选择最小的
            minnum = min(arr2[i:len(arr2)]);
            #插入最前方
            j = arr2.index(minnum)-1;
            while j>=i:
                arr2[j+1] = arr2[j];
                j-=1;
            arr2[i] = minnum;
    return arr2;

arr2 = my_sort(arr2);
print("排序之后的结果为:");
print(arr2);

arr3 = [8,9,1,5,3];
#选择排序
def select_sort(arr3):
    for i in range(0,len(arr3)-1):
        minnum = min(arr3[i:len(arr3)]);
        minindex = arr3.index(minnum);
        arr3[minindex],arr3[i]=arr3[i],arr3[minindex];
    return arr3;
arr3 = select_sort(arr3);
print("选择排序之后的结果为:");
print(arr3);

arr4 = [9,7,2,5,1];
#插入排序
def insert_sort(arr4):
    for i in range(1,len(arr4)):
        j = i-1;
        temp = arr4[i];
        while j>=0 and arr4[j]>temp:
            arr4[j+1]=arr4[j];
            j-=1;
        arr4[j+1] = temp;
    return arr4;
arr4 = insert_sort(arr4);
print("插入排序之后的结果为:");
print(arr4);

arr5 = [6,8,1,2,3];
#归并排序
def union_func(arr5,start,middle,end):

    arr_temp = [];
    index1 = start-1;
    index2 = middle;
    index = -1;
    
    while index1<middle and index2<end:
        
        if arr5[index1+1]<=arr5[index2+1]:
            
            arr_temp.insert(index+1,arr5[index1+1]);
            index+=1;
            index1+=1;
        
        else:
            
            arr_temp.insert(index+1,arr5[index2+1]);
            index+=1;
            index2+=1;   
            
    while index1<middle:
        
        arr_temp.insert(index+1,arr5[index1+1]);
        index += 1;
        index1 += 1;
        
    while index2<end:
               
        arr_temp.insert(index+1,arr5[index2+1]);
        index += 1;
        index2 += 1;    
        
    for i in range(start,end+1):
        arr5[i] = arr_temp[i-start];
    
    return arr5;

def union_sort(arr5,start,end):
    
    if start<end:
        
        middle = int((start+end)/2);
        arr5 = union_sort(arr5,start,middle);
        arr5 = union_sort(arr5,middle+1,end);
        arr5 = union_func(arr5,start,middle,end);
        
    return arr5;

arr5 = union_sort(arr5,0,len(arr5)-1);
print("归并排序的结果为:");
print(arr5);


保持不断学习的劲头,终有一天你会破蛹而出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值