*qbf=NULL;//是从大到小排序)结点和链表中第一个结点交换(利用指针实现);然后,从链表中第二个结点开始遍历链for(p = h ; p->next!=NULL; pbf = p, p = p->next)//表,找出关键值最大的结点和链表中第二个结点交换……
插入排序 插入排序回顾 我们先回顾一下对数组的插入排序,其步骤大致为: 先将第一个数据元素看作是一个有序序列,后面的 n-1 个数据元素看作是未排序序列。对后面未排序序列中的第一个数据元素在这个有序序列中进行从后往前扫描,找到合适的插入位置并插入到其中,每次有序
算法思想到处都可以找到,程序代码还是得自己去写,自己亲手尝试过,才更理解其中的原理。C和C++差别不大,算法是相同的。加油吧!
1 实现一个表示链表节点的静态内部类,通过该类对象可以构建一条单向的链表结构。2 实现算法,步骤如下:1. 创建一个虚拟头节点,链接在参数链表头节点前面;2. 声明一个指针 prev,代表前一个节点,默认指向原头节点;3. 声明一个指针 current,代表当前节点,默认指向原头节点的后一个节点;4. 如果 current ...
这个思路本身没有问题,但是它不够通用,因为很多时候面试官会考我们对单向链表进行快速排序,这个时候我们就没办法让一个指针从后向前扫描了。也就是Partition函数不好写。 2、《剑指Offer》上的Partition函数更具通用性,如下: intPartition(intarr[],intlow,inthigh){intleft=low;Swap(arr[low],arr[high]);for(...
//函数fun功能是将带头节点的单向链表结点域中的数据从小到大排序。 //相当于数组的冒泡排序。 1#include <stdio.h>2#include <stdlib.h>3#defineN 64typedefstructnode {5intdata;6structnode *next;7} NODE;8voidfun(NODE *h)9{ NODE *p, *q;intt;10/***found***/11p =h->next;//头结点的指...
f= h->next;//f指向旧链的第一个节点,即等待在新链中“安家落户”(插入)的节点h->next = NULL;//将原链的第一个节点单拿出来作为新链(待插入链)的第一个节点,默认此节点是关键值最大的节点while(f!=NULL)//当f=NULL,旧链中的节点都插入到了新链,排序完成{for(t = f, q = h; (q != NU...