原题:来自http://learn.akae.cn/media/ch26s01.html
1、修改
insert
函数实现插入排序的功能,链表中的数据按从小到大排列,每次插入数据都要在链表中找到合适的位置再插入。在第 6 节 “折半查找”中我们看到,如果数组中的元素是有序排列的,可以用折半查找算法更快地找到某个元素,想一想如果链表中的节点是有序排列的,是否适用折半查找算法?为什么?
1、下面是从小到大的插入函数,里面用了两个if 和 (*head)->next = node; 才实现插入自动排序功能。 我想去掉 if(lnode->next == NULL){ 判断和(*head)->next = node;两块语句实现此功能。想了好久也没有实现,请各位指点。
2、我觉得不能用折半算法查找,因为但连表是从表头开始查找元素的。
不知道是否正确。请各位给予答案。
插入算法: 44 link insert(link lnode, char ch) 45 { 46 link node = create_node(ch); 47 link *head; 48 if(lnode==NULL){ 49 return node; 50 } 51 if(lnode->next == NULL){ 52 if(lnode->element >= ch){ 53 node->next = lnode; 54 return node; 55 } 56 } 57 for(head=&lnode; (*head)->next; head=&(*head)->next){ 58 if((*head)->element >= ch){ 59 node->next = *head; 60 head = &node; 61 return lnode; 62 } 63 } 64 (*head)->next = node; 65 return lnode; 66 } 67 格式定义: 5 typedef struct node *link; 6 #include <stdio.h> 7 struct node{ 8 char element; 9 link next; 10 }; 根据字符创建节点 95 link create_node(char ch) 96 { 97 link p = malloc(sizeof *p); 98 p->element = ch; 99 p->next = NULL; 100 return p; 101 } 102
相关推荐
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
### 表插入排序详解 #### 一、概念与原理 **表插入排序**是一种利用链表作为存储结构的排序算法。相较于传统的数组插入排序,在链表中进行排序时,我们无需移动元素,而是通过改变节点之间的指针指向来实现排序的...
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
以下问题要求统一在一个大程序里解决。 21、折半插入排序 22、21、折半插入排序 22、冒泡排序 21、折半插入排序 22、冒泡排序 23、快速排序 21、折半插入排序 22、冒泡排序 23、快速排序 24、简单选择排序 21、折半...
数据结构(c语言版)严蔚敏 吴伟民编著 中直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现、归并排序,使用c语言实现
其中包含了各种对数组排序的方法,数组下标从1开始,有插入排序(直接插入排序、希尔排序),交换排序(起泡排序、快速排序),选择排序(简单选择排序,堆排序(另外写))、归并排序(递归,非递归)。
二叉排序树插入算法 二叉排序树插入是指在二叉排序树中插入新的数据元素的过程。二叉排序树是一种特殊的二叉树,它的每个结点的关键字都大于左子树的关键字,小于右子树的关键字。因此,在插入新的数据元素时,需要...
直接插入排序是一种简单的排序方法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序...
直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序和二路归并排序是计算机科学中经典的排序算法,它们在数据处理和算法学习中占有重要地位。这些排序算法各有特点,适用场景不同,下面将逐一详细介绍,并结合...
下面将详细讲解这7种排序算法:快速排序、归并排序、插入排序、选择排序、冒泡排序、堆排序以及希尔排序。 1. **快速排序**:由C.A.R. Hoare提出的,采用分治策略。基本思想是选取一个基准元素,通过一趟排序将待...
本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...
本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...
这个程序首先输入10个数字,然后使用插入法排序算法将他们从小到大排序。程序使用了两个循环,外层循环控制排序的次数,内层循环控制比较和插入的过程。 冒泡排序、选择排序和插入法排序都是基本的排序算法,虽然...
本篇文章将详细介绍如何通过编写C语言程序实现直接插入排序,并输出每次排序后的结果,以便观察排序过程中的变化。 #### 二、直接插入排序的基本原理 直接插入排序的基本思想是:将待排序的序列看作是由一个已排序...
在已排序的部分序列中,逐个插入未排序元素,每次插入都会从后向前比较,找到合适的插入位置。这种算法对于小规模或接近有序的数组效率较高。 2. **希尔排序**: 希尔排序是插入排序的一种更高效的改进版本,由...
插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。插入排序的时间复杂度为O(n^2),但在最好情况...
它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上通常采用in-place排序(即只需用到O(1)的额外空间),因此空间效率较高。 #### 二、插入排序...