用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);
保持不断学习的劲头,终有一天你会破蛹而出。