【算法】排序——直接排序
admin
2024-03-16 10:58:02

内部排序的全部过程都是在内存中进行的。按排序策略的不同可以将内部排序划分为直接插入排序、冒泡排序、简单选择排序、希尔排序、快速排序、堆排序、归并排序、基数排序等。其中前三种排序方法属于简单的排序方法,其特点是排序过程直观、易于理解和实现,都属于稳定的排序方法,但效率较低;其他几种方法则称为先进的排序方法,算法原理相对复杂,不稳定,但效率较高。

直接插入排序

(1)直接插入排序的基本思想是把新的未排序的元素逐个插入已排序的有序表种。直接插入排序算法可以借助减治法的减一技术进行设计。

(2)假设待排序序列中有k个元素(1<=k<=N-2)已经按照关键字值递增顺序排列,将一个未排序的元素list[i](1<=i<=N-1)直接插入适当的位置。整个排序过程进行N-1趟插入,即首先从右向左顺序搜索表中已排序的序列,直到找到一个元素list[j-1](1<=j-1<=k-1)的关键字值比list[i]的关键字值小;将已排序序列中比list[i]的关键字值大的元素list[j],list[i+1],……,list[k]依次在线性表中后移一个位置;将元素list[i]插入表中的j的位置上成为元素list[j]。 

(3)直接插入排序算法

void insertSort(int list[],int n){
    int i,j;
    for(i=2;i<=n;i++){
        list[0]=list[i];
        j=i-1;
        while(j>0&&list[0]
            list[j+1]=list[j];
            --j;
        }
        list[j+1]=list[0];
    }
}  

(4)完整程序 

#include
#define N 20
int list[N+1];
void insertSort(int list[],int n){
    int i,j;
    for(i=2;i<=n;i++){
        list[0]=list[i];
        j=i-1;
        while(j>0&&list[0]
            list[j+1]=list[j];
            j--;
        }
        list[j+1]=list[0];
    }
}
int main(){
    int i,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&list[i]);
    }
    insertSort(list,n);
    for(i=1;i<=n;i++){
        printf("%d ",list[i]);
    } 
    return 0;

相关内容

热门资讯

摸鱼、钓虾、吃瓜、赏荷…初夏时... 这个周末,一场场充满野趣的“田园嘉年华”在沪郊金山多个农场上演,吸引众多市民带着孩子下乡来,赛跑、吃...
原创 戚... 5月28日,北京环球影城迎来了一对温暖的家庭画面:戚薇和李承铉携三岁半的儿子Seven现身游玩。现场...
滹沱河畔 遇见“诗和远方” 图为市民在滹沱河畔休闲娱乐。 初夏五月,惠风和畅。徜徉在石家庄滹沱河生态区(城区段),澄澈河水蜿蜒...
在迪士尼排队两小时,我才看清V... 文丨沈理 在网上看到一则新闻: 上海迪士尼,创极速光轮排队区。一个父亲牵着七八岁的儿子,已经在烈日...
重庆文旅喊你去吃火锅、观山水、... 本网讯(草原云·正北方网记者 马丽侠)火锅、机车、文创、演艺……5月28日下午,重庆市文化和旅游发展...