排序算法的C++ && Python实现---选择排序
来源:互联网 发布:linux打包多个文件夹 编辑:程序博客网 时间:2024/06/06 11:35
- 算法思想:
选择排序有简单的选择排序和二元选择排序。其中,简单选择排序是依次寻找序列中的最小值,然后将其放入序列的前端。比如,序列 a[16]={88,10,71,29,50,9,34,4,675,3,89,19,55,67,45,234};第一次循环找到最小值3,然后与第一个元素交换;接下来,在除去第一个元素后的序列中寻找最小值,并与原序列中的第二个元素交换;直到第n个元素与第n-1个元素交换完成,则排序结束。而二元选择排序则是每次循环确定最大值和最小值,将最大值向序列尾部放,将最小值向序列首部放,这样循环n/2次就足够。 - C++程序(VS2012)
//打印排序结果函数void Print(int a[],int n,int i=0){ //cout<<i<<endl; cout<<"排序后的结果为:"<<endl; for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl;}
简单选择排序:
//简单选择排序---每次循环确定一个元素int FindMin(int a[],int n) //查找数组中最小值 { int minA=a[0]; for(int i=1;i<n;i++) { if(a[i]<=minA){ minA=a[i]; } } return minA; }int minIndex(int a[],int n,int minA) //确定最小值出现位置{ int Index; for(int i=0;i<n;i++) { if(a[i]==minA) { Index=i; break; } } return Index; }void SimpleSelectSort(int a[],int b[],int n){ int index; for(int i=0;i<n;i++) { b[i]=FindMin(a,n); index=minIndex(a,n,b[i]); a[index]=100000; } Print(b,n);}
二元选择排序:
//二元选择排序---每次循环确定两个元素void ErYuanSelectSort(int a[],int n){ int maxIndex; //maxIndex为数组中最大值索引值 int minIndex; //minIndex为数组中最小值索引值 int temp,i,j; //temp作为两数交换时的中间值,i、j为循环变量 for(i=0;i<n/2;i++) //作不超过n/2次循环 { minIndex=i; //将最小值索引赋为每次判断序列的首位置i, maxIndex=n-i-1; //将最大值索引赋为每次判断序列的末位置n-i-1. if(a[maxIndex]<=a[minIndex]) //因为每次判断最大值和最小值,是在[i+1,n-i-1]之间判断, { //并不包括两个端点值,所以在每次判断之前, temp=a[maxIndex]; //应首先比较两者大小,若初始设定的最大值小于最小值,则交换 a[maxIndex]=a[minIndex]; //等会会有反例证明此步骤的必要性 a[minIndex]=temp; } for(j=i;j<n-i;j++) //寻找[i+1,n-i-1]之间的最大值和最小值索引 { if(a[maxIndex]<=a[j]) maxIndex=j; if(a[minIndex]>=a[j]) minIndex=j; } //交换,即将最大值往后放,最小值往前放 temp=a[i];a[i]=a[minIndex];a[minIndex]=temp; temp=a[n-i-1];a[n-i-1]=a[maxIndex];a[maxIndex]=temp; Print(a,n); //在循环内调用数据打印函数,打印每次排序结果 } Print(a,n); //调用数据打印函数,打印排序结果}
3 Python程序(Python 2.7)
'''输出排序结果函数'''def Print(ddata): n=len(ddata) for i in range(n): print ddata[i], #其中","为了不让其输出默认的换行符
简单选择排序:
'''简单选择排序'''def findMin(data): #寻找最小值和其索引 global k n=len(data) minData=data[0] for i in range(n): if(data[i]<=minData): minData=data[i] k=i return minData,kdef simSelectSort(data): n=len(data) b=[] for i in range(n): minData,minIndex=findMin(data) b.append(data[minIndex]) data[minIndex]=inf Print(b)
二元选择排序:
'''二元选择排序'''def findMax(data): n=len(data) maxData=data[0] maxIndex=0 for i in range(n): if maxData<=data[i]: maxData=data[i] maxIndex=i return maxData,maxIndexdef ErYuanSelectSort(data): n=len(data) for i in range(n/2): minIndex=i;maxIndex=n-i-1 if(data[minIndex]>data[maxIndex]): data[minIndex],data[maxIndex]=data[maxIndex],data[minIndex] for j in range(i,n-i): if data[minIndex]>=data[j]: minIndex=j if data[maxIndex]<=data[j]: maxIndex=j data[i],data[minIndex]=data[minIndex],data[i] data[n-i-1],data[maxIndex]=data[maxIndex],data[n-i-1] print ' ' Print(data)
0 0
- 选择排序算法的C语言实现
- 排序算法的C++ && Python实现---选择排序
- 选择排序(伪代码算法,c++,以及python实现)
- 排序算法总结(简单选择排序、堆排序)(python实现)
- 冒泡排序、选择排序、插入排序 算法实现(C++)
- 冒泡排序、选择排序、插入排序 算法实现(C++)
- 冒泡排序、选择排序、插入排序 算法实现(C++)
- 冒泡排序、选择排序、插入排序 算法实现(C++)
- 排序算法C++&&Python实现---冒泡排序
- 排序算法C++&&Python实现---归并排序
- 排序算法C++&&Python实现---归并排序
- 选择排序算法的实现
- Python排序算法-选择排序
- 排序算法-选择排序(python)
- 《算法图解》的选择排序的python和java实现
- 排序算法—选择排序算法分析与实现(Python)
- 选择排序的c实现
- python实现2种简单的排序算法--冒泡排序和选择排序
- swal弹框后input标签获得焦点
- The Morning after Halloween(POJ
- Java NIO 的前生今世 之四 NIO Selector 详解
- CodeForces 631 B.Print Check(水~)
- JVM调优总结(四)-垃圾回收面临的问题
- 排序算法的C++ && Python实现---选择排序
- JavaScript indexOf()
- 运维学习笔记201~300
- Ubuntu QT调试make_slc_s1a
- 教育机器人
- git
- 在树莓派3上编译OpenCV时出现的一个问题
- 自己学Docker:11.Docker版本--CE和EE
- Spring.Net使用事务,try catch不回滚