今天在看麻神理工学院的《算法导论》的公开课,其中第一课中列举了一个例子就是插入排序,想着好久都没写过了就尝试写一下,其中出了写错误,在此写出来,以防后面再犯错。
程序是用windows下的gcc编译的。
错误代码:
#include "stdio.h"
#define LENG 10
int main()
{
int a[LENG]={4,1,3,7,6,0,8,2,9,5};
int i=0;
for (i=1; i<LENG; i++)
{
int j=i-1,temp=a[i];
while (j>=0 && a[j]>a[i])
{
a[j+1]=a[j];
j--;
}
a[j+1]=a[i];
}
for (i=0; i<LENG; i++)
{
printf("%d\t",a[i]);
}
return 0;
}
错误原因:
在程序中,数组的下标就类似与这个数组所开辟的内存空间中的哪一块地址。由于在while循环中,数组中的内容的顺序是不断变化的,导致a[i]的值是不断变化的(i的值在每一趟循环中式不变的),因此就会判断错误。
正确代码:
#include "stdio.h"
#define LENG 10
int main()
{
int a[LENG]={4,1,3,7,6,0,8,2,9,5};
int i=0;
for (i=1; i<LENG; i++)
{
int j=i-1,temp=a[i];
while (j>=0 && a[j]>temp)
{
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
}
for (i=0; i<LENG; i++)
{
printf("%d\t",a[i]);
}
return 0;
}
分享到:
相关推荐
- 插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 - C++中,插入排序可以通过一个for循环和一个while循环实现,for循环...
### 使用C语言实现的直接插入排序算法 #### 算法概述 本篇文章将详细介绍一个使用C语言编写的直接插入排序算法。直接插入排序是一种简单的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序...
基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。 **示例代码解析**: ```csharp using System; namespace ...
3. **希尔排序**(Shell Sort):它是插入排序的一种优化版本,通过将待排序的元素按照一定的间隔分组,对每组进行插入排序,然后逐渐减小间隔,直到间隔为1。希尔排序的时间复杂度取决于所选的间隔序列,通常介于O...
根据给定的信息,本文将对九种不同的排序算法进行详细解析:选择排序、插入排序、冒泡排序、希尔排序、快速排序、箱子排序(计数排序)、基数排序、归并排序以及堆排序。 ### 一、选择排序 选择排序的基本思想是...
本篇文章将深入探讨并详细解析三种基本的排序算法:冒泡排序、插入排序以及选择排序,这三种算法均使用C语言实现。 ### 冒泡排序 冒泡排序是一种简单的比较排序算法,其基本思想是重复地走访过要排序的数列,一次...
以下是四种常见的排序算法:冒泡排序、选择排序、插入排序和快速排序的详细解析。 1. **冒泡排序**: 冒泡排序是最基础的排序方法,通过不断交换相邻的逆序元素来逐步排序。它的主要思想是重复遍历数组,每次比较...
插入排序的基本思想是将一个记录插入到已排好序的一系列元素中,从而得到一个新的、记录数增1的有序表。通常采用in-place排序(即只需用到O(1)的额外空间)。 #### 示例代码分析 ```cpp #include using namespace...
本文将详细解析标题中提到的五种排序算法:冒泡排序、插入排序、希尔排序、选择排序以及堆排序。这五种算法在不同的场景下有着各自的应用优势,理解它们的工作原理能帮助我们更好地优化代码性能。 1. **冒泡排序**...
本文将详细解析三种常见的排序算法:冒泡排序、插入排序和选择排序,这对于初学者掌握排序算法的基本原理至关重要。 首先,我们来看冒泡排序。冒泡排序是一种简单的比较型排序算法,其基本思想是通过重复遍历待排序...
### 8086汇编实现冒泡排序、直接插入排序、折半查找 #### 冒泡排序 **冒泡排序**是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复...
希尔排序是插入排序的一种更高效的改进版本,它通过比较相距一定间隔的元素来工作,然后逐渐减小这个间隔,直到间隔为1,此时数组基本有序,最后使用插入排序完成排序。希尔排序的时间复杂度取决于增量序列,但通常...
本文将深入探讨“流行算法排序实用案例”中涉及到的几种常见排序算法:快速排序、冒泡排序、二分插入排序、希尔排序,并结合Java语言进行详细解析。 1. **快速排序**: 快速排序是一种高效的排序算法,由C.A.R. ...
希尔排序是一种高效的排序算法,它的原理是每次将待排序序列分成若干个子序列,对每个子序列进行插入排序,然后逐渐缩小子序列的间隔,直到间隔为1时,对整个序列进行最后一次插入排序。 本文介绍了六种常见的排序...
2. **分组比较**:将原来的数组按照增量 ti 分成若干个子数组,然后分别对各个子数组进行直接插入排序。 希尔排序的关键在于增量序列的选择,不同的增量序列对排序的效率有很大影响。希尔排序的时间复杂度取决于...
希尔排序是基于插入排序的,但是通过允许交换非相邻元素来改进插入排序。 **时间复杂度:** - 希尔排序的时间复杂度取决于增量序列的选择,最好的情况下可以达到接近O(n),但在某些情况下可能退化至O(n^(3/2))。 *...
根据给定的文件内容,我们可以总结出关于C语言中三种基本排序算法——冒泡排序、选择排序以及插入排序的关键知识点。 ### 冒泡排序 #### 基本思想 冒泡排序是一种简单的排序算法,其基本思想是重复地遍历待排序的...
为了解决上述问题,我们需要实现一个函数或程序,该程序能够接收一个已排序的数组和一个待插入的新元素,然后将新元素正确地插入到数组中相应的位置,使得插入后数组依然保持原来的排序顺序。 #### 四、具体实现...
- **原理**:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体做法是:首先选择一个增量序列 t1,t2,…,tk,其中 ti > tj, tk = 1;然后按增量序列个数 k 进行 k 趟排序;每趟排序,根据...