首页 > 代码库 > 选择类排序
选择类排序
#include<stdio.h>/**选择类排序,每天一道算法题 *按照从小到大的顺序进行排序 * *///遍历序列void traverseArray(int *p,int length){ int i=0; for(;i<length;i++) { printf("%d\n",p[i]); } }//简单选择类排序 void selectSort(int *p,int length){ int i,j,temp,index; for(i=0;i<length;i++) { index=i; for(j=i;j<length;j++) { if(p[index]>p[j]) index=j; } temp=p[i]; p[i]=p[index]; p[index]=temp; }} void heapAdjest(int *p,int s,int length){ int i; int temp=p[s]; for(i=2*s+1;i<=length;i*=2) { if(i<length&&p[i]<p[i+1]) ++i; if(!temp>p[i]) break; p[s]=p[i]; s=i; } p[s]=temp; }void heapSort(int *p,int length){ int i; int temp;
//建立大顶堆 for(i=length/2;i>0;--i) heapAdjest(p,i,length);for(i=length-1;i>-1;i--) { temp=p[i]; p[i]=p[0]; p[0]=temp; heapAdjest(p,0,i-1); traverseArray(p,length); printf("\n"); } }int main(){ int a[]={9,2,1,4,5,7,3,8,6}; // selectSort(a,sizeof(a)/sizeof(int)); heapSort(a,sizeof(a)/sizeof(int)); traverseArray(a,sizeof(a)/sizeof(int)); system("pause"); return 0;}
简单选择排序算法采用首先查找到最大值,然后将其放到最后。其算法的时间复杂度为O(n2).
堆排序的思想是首先建立堆,建立堆时从序列的一半递减开始创建,然后再进行调整。堆排序只要进行筛选调整,必然需要调整,每次调整的次数小于其深度2k(其中k=logn)(最多比较两个分支),因此不管原来数据为何种类型,其算法的时间复杂度均为O(nlogn).
选择类排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。