目录一、前言二、选择类排序1.简单选择排序2.树形选择排序3.堆选择排序三、归并排序四、分配类排序1.多关键字排序2.链式基数排序五、总结归纳一、前言 之前的排序总结(一)对插入类和
之前的排序总结(一)对插入类和交换类排序作了比较详细的总结,对于直接插入、希尔排序、冒泡排序、快速排序要求熟练掌握
这篇排序全面总结(二)主要介绍选择类排序中的简单、树形和堆排序,归并排序、分配类排序的基数排序
选择类:每次从待排序的无序序列中,选择一个最大或最小的数字,放到前面,数据元素为空时排序结束
动态演示:
算法讲解:
代码:
void SelectSort(RecordType r[], int length)
{
int i,j,k; int n; RecordType x; n=length;
for ( i=1 ; i<= n-1; ++i)
{
k=i;
for (j=i+1 ; j<= n ; ++j)
if (r[j].key < r[k].key ) k=j;
if ( k!=i)
{
x= r[i]; r[i]= r[k]; r[k]=x;
}
}
}
特点:
不稳定排序
时间复杂度O(n*n), 空间复杂度O(1)
静态演示:
算法讲解:
特点:
算法不作要求
稳定排序, 增加额外的存储空间
时间复杂度O(nlogn),空间复杂度O(n-1)
动态演示:
算法讲解:
建立初始堆:
void crt_heap(RecordType r[], int length )
{
int i,n;
n= length;
for ( i=n/2; i >= 1; --i)
sift(r,i,n);
}
调整堆:
void sift(RecordType r[], int k, int m)
{ RecordType t; int i,j; int x; int finished;
t= r[k];
x=r[k].key; i=k; j=2*i;
finished=FALSE;
while( j<=m && !finished )
{
if (j<m && r[j].key< r[j+1].key ) j=j+1;
if ( x>= r[j].key) finished=TRUE;
else
{ r[i] = r[j]; i=j; j=2*i; }
}
r[i] =t;
}
堆排序:
void HeapSort(RecordType r[],int length)
{
int i,n; RecordType b;
crt_heap(r, length); n= length;
for ( i=n ; i>= 2; --i)
{
b=r[1];
r[1]= r[i];
r[i]=b;
sift(r,1,i-1);
}
}
特点:
堆选择是树形的改进,空间占用较小
不稳定排序,适合n值较大的排序
时间复杂度O(n*logn),空间复杂度O(1)
法一:
将整体数字一分为二,逐层细分
细分完成后,每一块进行排序,直到整体有序
法二:
将一串序列,相邻的两个归并到一起排序,再次把相邻两个有序的归并块再次排序,直到最后有序(优先推荐这种算法)
代码:
void MergeSort ( RecordType r[], int n)
{
MSort ( r, 1, n, r);
}
void MSort(RecordType r1[], int low, int high, RecordType r3[])
{
int mid; RecordType r2[20];
if (low==high) r3[low]=r1[low];
else
{
mid=(low+high)/2;
MSort(r1,low, mid, r2);
MSort(r1,mid+1,high, r2);
Merge (r2,low,mid,high, r3);
}
}
特点:
稳定排序
时间复杂度O(nlogn),空间复杂度O(n)
附加空间比较大,很少用于内部排序,主要是外部排序
高位优先:按照花色大小分成四类,在每一类中按照面值进行排序
低位优先:按照面值大小分成13类,将相同面值的不同花色进行排序
算法讲解:
特点:
时间复杂度O(d*n),d是关键字数,n是记录数
稳定的排序
空间复杂度=2个队列指针+n个指针域
到此这篇关于C语言数据结构与算法之排序总结(二)的文章就介绍到这了,更多相关C语言 数据结构 排序内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: C语言数据结构与算法之排序总结(二)
本文链接: https://lsjlt.com/news/160189.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0