选择排序 (直接选择排序 ,堆排序)
2016-12-14 16:31
477 查看
1:直接选择排序
直接选择排序就是第一次先找出关键字最小的记录下来,并且与无序列区的第一个交换,,然后每次都这样查找
代码:
2:堆排序
http://www.cnblogs.com/mengdd/archive/2012/11/30/2796845.html
代码:
对于时间复杂度,直接选择排序时间复杂度为n*n,而堆排序时间复杂度为n*logn;
直接选择排序就是第一次先找出关键字最小的记录下来,并且与无序列区的第一个交换,,然后每次都这样查找
代码:
void choosesort(int a[],int sz) { for(int i=0; i<sz-1; i++) { int sentry=i; for(int j=i+1; j<sz; j++) { if(a[j]<=a[sentry]) sentry=j; } swap(a[sentry],a[i]); } for(int i=0; i<11; i++) { cout<<a[i]<<" *"; } cout<<endl; }
2:堆排序
http://www.cnblogs.com/mengdd/archive/2012/11/30/2796845.html
代码:
//堆筛选函数 //已知H[start~end]中除了start之外均满足堆的定义 //本函数进行调整,使H[start~end]成为一个大顶堆 void HeapAdjust(int a[], int start, int end) { int temp = a[start]; for(int i = 2*start + 1; i<=end; i*=2) { //因为假设根结点的序号为0而不是1,所以i结点左孩子和右孩子分别为2i+1和2i+2 if(i<end && a[i]<a[i+1])//左右孩子的比较 { ++i;//i为较大的记录的下标 } if(temp > a[i])//左右孩子中获胜者与父亲的比较 { break; } //将孩子结点上位,则以孩子结点的位置进行下一轮的筛选 a[start]= a[i]; start = i; } a[start]= temp; //插入最开始不和谐的元素 } void heapsort(int a[], int n) { //先建立大顶堆 for(int i=n/2; i>=0; --i) { HeapAdjust(a,i,n); } //进行排序 for(int i=n-1; i>0; --i) { //最后一个元素和第一元素进行交换 swap(a[i],a[0]); //然后将剩下的无序元素继续调整为大顶堆 HeapAdjust(a,0,i-1); } }
对于时间复杂度,直接选择排序时间复杂度为n*n,而堆排序时间复杂度为n*logn;
相关文章推荐
- 排序算法-之选择排序(直接选择排序,堆排序)
- 选择排序(直接选择排序、堆排序)
- 内部排序之选择排序(直接选择排序,堆排序)
- 选择排序(直接选择排序,堆排序)
- 选择排序:直接选择排序,堆排序
- java数据结构之插入排序(选择排序(直接选择排序、堆排序))
- 选择排序---直接选择排序和堆排序
- 选择排序(选择排序和堆排序)
- 六、内部排序综合(九种)—插入类排序(直接插入、折半插入、希尔排序);交换类排序(冒泡、快速);选择类排序(简单选择、堆排序);二路归并排序;基数排序
- 【算法拾遗(java描述)】--- 选择排序(直接选择排序、堆排序)
- 选择排序:直接选择排序&堆排序
- 选择排序 - 直接选择排序
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- 比较排序总结——直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序
- 2.选择排序:直接选择排序和堆排序
- 选择排序(直接选择、堆排序)
- 七种排序(直接插入、折半插入、希尔、起泡、快速、简单选择、堆排序)
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
- 算法分析-选择排序(直接选择排序 & 堆排序)
- 七种排序(直接插入、折半插入、希尔、起泡、快速、简单选择、堆排序)