目录
1. 直接插入排序
1.1 直接插入排序简介
1. 什么是直接插入排序
直接插入排序是一种最简单的排序方法,其基本操作是将需要排序的元素插入到已排好的有序表序列中,从而得到一个完整的有序序列
2. 排序思想
- 将待排序序列分为两部分,一部分有序一部分无序。
- 我们把第一个元素看作有序序列,从第二个元素到最后为无序序列。
- 将无序序列中每一个元素依次插入到有序序列的合适位置–从小到大(从大到小)。

1.2 排序实现
1. 排序代码
void insertsort(struct element a[],int n){
int i,j;
struct element x;
for(i=1;i<n;i++){
if(a[i].key<a[i-1].key) //反序时
{
x=a[i];
j=i-1;
do //找a[i].key的插入位置
{
a[j+1]=a[j]; //将关键字大于a[i].key的记录后移
count1++;
j--;
move1++;
}while(j>=0&&a[j].key>x.key);
a[j+1]=x; //在j+1处插入a[i]
move1=move1+2;
}
count1++;
}
}
2. 复杂度分析:
时间复杂度:最坏情况下为O(N*N),此时待排序列为逆序,或者说接近逆序
最好情况下为O(N),此时待排序列为升序,或者说接近升序。
空间复杂度:O(1)
3. 运行结果:

1.3 学习链接
2. 希尔排序(分组排序)
2.1 希尔排序简介
1. 什么是希尔排序
希尔排序是把序列按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量的逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个序列恰好被分为一组,算法便终止。
2.排序思想
- 将元素等分为n小组,元素较少时,元素一般以4开始,将组内元素进行排序,一般采取插入排序
- 排序完成之后,将元素再次分组(n/2组),组内元素再次排序
- 以此类推,当n==1时,排序完成

2.2 排序实现
1. 希尔排序代码
void shellsort(struct element a[],int n){
int i,j,k;
struct element tmp;
k=n/2; //增量置初值
while(k>0)
{
for(i=k;i<n;i++) //对所有组采用直接插入排序
{
tmp=a[i]; //对相隔k个位置一组采用直接插入排序
j=i-k;
while(j>=0&&tmp.key<a[j].key)
{
a[j+k]=a[j];
j=j-k;
move2=move2+3;
}
a[j+k]=tmp;
count2++;
}
k=k/2; //减小增量
}
}
2. 复杂度分析

时间复杂度平均:O(N^1.3)
空间复杂度:O(1)
3. 运行结果


本文详细介绍了直接插入排序、希尔排序、快速排序、堆排序、冒泡排序和简单选择排序这六种排序算法,包括算法思想、实现代码、复杂度分析及运行结果。这些排序算法在不同场景下有不同的效率表现,适用于不同的数据结构和规模。

1191

被折叠的 条评论
为什么被折叠?



