zoukankan      html  css  js  c++  java
  • python学习(6)选择排序算法简单代码

    选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。[1]
    简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。
    以下为简单选择排序的存储状态,其中大括号内为无序区,大括号外为有序序列:
    初始序列:{49 27 65 97 76 12 38}
      第1趟:12与49交换:12{27 65 97 76 49 38}
      第2趟:27不动 :12 27{65 97 76 49 38}
      第3趟:65与38交换:12 27 38{97 76 49 65}
      第4趟:97与49交换:12 27 38 49{76 97 65}
      第5趟:76与65交换:12 27 38 49 65{97 76}
      第6趟:97与76交换:12 27 38 49 65 76 97 完成

    写一个程序,对任意数组做从小到大排列:

     1 #!/usr/bin/env python
     2 # -*- coding: UTF-8 -*-
     3 # Author:show530
     4 
     5 def find_minmunber(list):
     6     smallest_munber=list[0]
     7     smallest_index=0
     8     for i in range(1,len(list)):
     9         if list[i]<smallest_munber:
    10             smallest_munber=list[i]
    11             smallest_index=i
    12     return smallest_index
    13 
    14 def from_small_arr(arr):
    15     new_arr=[]
    16     for i in range(len(arr)):
    17         min_munber=find_minmunber(arr)
    18         new_arr.append(arr.pop(min_munber))
    19     return new_arr
    20 
    21 
    22 
    23 my_list=[9,24,56,97,82,1,3,6,997,642,352]
    24 print("列表从小到大排列为:")
    25 print(from_small_arr(my_list))
    C:UsersAdministratorPycharmProjectsuntitledvenvScriptspython.exe C:/Users/Administrator/PycharmProjects/untitled/DAY1/SX.py
    
    列表从小到大排列为:
    [1, 3, 6, 9, 24, 56, 82, 97, 352, 642, 997]
    
    
    Process finished with exit code 0
    View Code

    换成从大到小排列:

     1 #!/usr/bin/env python
     2 # -*- coding: UTF-8 -*-
     3 # Author:show530
     4 
     5 
     6 def find_max_munber(list):
     7     max_munber=list[0]
     8     max_munber_index=0
     9     for i in range(1,len(list)):
    10         if list[i]>max_munber:
    11             max_munber=list[i]
    12             max_munber_index=i
    13     return max_munber_index
    14 
    15 def form_large_small(arr):
    16     new_arr=[]
    17     for i in range(len(arr)):
    18         largest_number=find_max_munber(arr)
    19         new_arr.append(arr.pop(largest_number))
    20     return new_arr
    21 
    22 my_list=[7,56,89,41,8,2,46,92,478,1,896,74,66]
    23 print("数组从大到小排列顺序为:")
    24 print(form_large_small(my_list))
    C:UsersAdministratorPycharmProjectsuntitledvenvScriptspython.exe C:/Users/Administrator/PycharmProjects/untitled/DAY1/sx2.py
    
    数组从大到小排列顺序为:
    [896, 478, 92, 89, 74, 66, 56, 46, 41, 8, 7, 2, 1]
    
    
    Process finished with exit code 0
    View Code
  • 相关阅读:
    CoreAnimation实现一个折线表
    copy和mutableCopy的深、浅拷贝
    寄存器变量
    GCD的一点理解
    Objective c 自动释放池
    iOS xcode 插件安装
    iOS cell 分割线顶格
    手机连接外设蓝牙4.0失败,发送消息失败遇到的问题总结
    svn中第一次check out working copy项目下来出现 ld: library not found for -lcrypto clang: error: linker command failed with exit code 1 (use -v to see invocation)
    ios调用百度地图定位遇到的奇葩问题
  • 原文地址:https://www.cnblogs.com/show530/p/8543197.html
Copyright © 2011-2022 走看看