• python开发之常见算法


    二分查找

    def bin_search(data_set, val):
        low = 0
        high = len(data_set) - 1
    
        while low <= high:
            mid = (low + high)//2
            if data_set[mid]==val:
                return mid
            elif data_set[mid] < val:
                low = mid + 1
            else:
                high = mid - 1
    
    data = [1,4,2,5,63,4]
    res = bin_search(data,63)
    print(res)
    

    冒泡排序

    思路:首先列表中每两个相邻的数,如果前边的比后面的大,那么交换这两个数。

    import random
    
    def bubble_sort(list1):
        for i in range(len(list1)-1):
            for j in range(len(list1)-i-1):
                if list1[j]>list1[j+1]:
                    list1[j],list1[j+1] = list1[j+1],list1[j]
    data = list(range(15))
    random.shuffle(data) #[2, 3, 13, 0, 14, 12, 6, 1, 4, 8, 10, 7, 11, 9, 5]
    print(data)
    res = bubble_sort(data) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
    print(data)
    

    优化后

    import random
    
    def bubble_sort(list1):
        for i in range(len(list1)-1):
            exchange = False
            for j in range(len(list1)-i-1):
                if (list1[j])>(list1[j+1]):
                    list1[j],list1[j+1] = list1[j+1],list1[j]
                    exchange = True
            if not exchange:
                break
    data = list(range(20))
    random.shuffle(data)
    print(data) # [5, 1, 14, 13, 6, 15, 7, 12, 2, 16, 11, 9, 18, 8, 17, 3, 4, 10, 0, 19]
    bubble_sort(data)
    print(data) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
    

    java版冒泡排序

    public class ArrayDemo4 {
    	
    	public static void main(String[] args) {
    		
    		int[] arr = new int[5];
    		arr[0] = 5;
    		arr[1] = 3;
    		arr[2] = 14;
    		arr[3] = 15;
    		arr[4] = 9;
    		// 冒泡排序
    		for(int i=0;i<arr.length-1;i++){
    			for(int j=0;j<arr.length-i-1;j++){
    				if(arr[j]>arr[j+1]){
    					int tmp = arr[j];
    					arr[j] = arr[j+1];
    					arr[j+1] = tmp;
    				}
    			}
    		}
    		// 打印出排序的结果
    		for(int i=0;i<arr.length;i++){
    			System.out.println(arr[i]);
    		}
    	}
    }

    选择排序

    思路:一趟遍历记录最小的数,放到第一个位置,再一趟遍历记录剩余列表中的最小的值,依次放置

    方法1

    import random
    def select_sort(li):
        for i in range(len(li) - 1):
            min_loc = i
            for j in range(i+1,len(li)):
                if li[j]<li[min_loc]:
                    min_loc = j
            li[i],li[min_loc] = li[min_loc],li[i]
    data = list(range(20))
    random.shuffle(data)
    print(data)
    select_sort(data)
    print(data)
    

    方法2

    def select_sort(relist):
        for i in range(len(relist)):
            for j in range(len(relist)-i):
                if relist[i] > relist[i+j]:
                    relist[i],relist[i+j] = relist[i+j],relist[i]
        return relist
    print(select_sort([1,5,2,6,9,3]))

    插入排序

    import random
    def insert_sort(li):
        for i in range(1,len(li)):
            temp = li[i]
            j = i - 1
            while j>=0 and li[j]>temp:
                li[j+1] = li[j]
                j = j-1
            li[j+1] = temp
    
    data = list(range(20))
    random.shuffle(data)
    print(data)
    insert_sort(data)
    print(data)
    

    快排

    思路:1、取一个元素p(第一个元素),使元素p归位

               2、列表被p分成两部分,左边都比p小,右边都比p大

               3、递归完成排序

    总结:跟着我,右手左手一个慢动作,右手左手慢动作重播

    def quick_sort(data,left,right):
        if left < right:
            mid = partition(data,left,right)
            quick_sort(data,left,mid - 1)
            quick_sort(data,mid+1,right)
    
    def partition(data,left,right):
        tmp = data[left]
        while left < right:
            while left<right and data[right]>=tmp: # 右手
                right -= 1
            data[left] = data[right]
            while left<right and data[left]<=tmp: # 左手
                left += 1
            data[right] = data[left]
        data[left] = tmp
        return left
    import random
    data = list(range(20))
    random.shuffle(data)
    print(data) # [19, 4, 0, 7, 14, 8, 2, 12, 11, 17, 13, 3, 18, 10, 6, 1, 15, 5, 16, 9]
    quick_sort(data,0,len(data)-1)
    print(data) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
    

     

  • 相关阅读:
    Zookeeper入门
    Redis五种数据类型
    shardingJDBC分库分表
    RabbitMQ入门
    Spring-Boot
    spring-mvc
    oracle一些对表的操作命令
    对IFeatureClass的选择结果进行再次选择及排序
    关于基础 DBMS 错误 ORA-01654的总结
    Linq 如何实现 in 与 not in
  • 原文地址:https://www.cnblogs.com/crazyforever/p/9380382.html
Copyright © 2020-2023  润新知