C 编程:如何实现插入排序?

Posted

技术标签:

【中文标题】C 编程:如何实现插入排序?【英文标题】:C programming: how to implement an insertion sort? 【发布时间】:2013-01-26 07:23:39 【问题描述】:

假设我有一个数字列表:

89 12 18 4 6

我想实现一个插入排序并将排序的每一步都打印到屏幕上:

Sort 1. 12 89 18 4 6
Sort 2. 4 12 89 18 6
Sort 3. 4 6 12 89 18
Sort 4. 4 6 12 18 89

这是我到目前为止的代码,我对在循环中插入 printf 的位置感到困惑。

void insertion_sort(FILE *fp, int ar[15])

  int i, j, temp;

  for (i = 0; i < 15; i++)
    printf("%d\n", ar[i]);

  for(i = 0; i < 15; i++) 
    temp = ar[i];
    for(j = i - 1; j >= 0 && ar[j] > temp; j--)
        ar[j + 1] = ar[j];
    ar[j + 1] = temp;
       

【问题讨论】:

在外部 for 循环中插入 printf(),因为您想在每一步打印您正在排序的数组。 你的排序是否有效?我猜你需要在内部 for 循环中包装第二个 for 循环代码 【参考方案1】:

您的排序方案实际上是选择排序:

  Sort 1. 12 89 18 4 6 
  Sort 2. 4 12 89 18 6
  Sort 3. 4 6 12 89 18
  Sort 4. 4 6 12 18 89

它找到最小的数字并将其放在列表的开头。 正常的插入排序会执行以下操作:

  Sort 1. 12 89 18 4 6
  Sort 2. 12 18 89 4 6
  Sort 3. 4 12 18 89 6
  Sort 4. 4 6 12 18 89

这就是它发现 18 小于 89 但大于 12 并在 12 和 89 之间插入 18 并完成第一次迭代。然后重复这个过程。

这是我的代码:

void insertion(int *x,int n) // int *x - array, n- array's length
    int i,j,k,temp,elem; // i,j,k - counters, elem - to store the element at pos x[i]
    for(i=0;i<n;i++)
        elem=x[i]; // store the element
        j=i; 
        while(j>0 && x[j-1]>elem) // the magic(actual sorting)
            x[j]=x[j-1];
            j--;
        
        x[j]=elem;  // swap the elements
        if(i>=1)   // here begins printing every sorting step, i>=1 because first time j is not greater than 0 so it just run through the loop first time
        printf("sort %d. ",i); // printing the step
        for(k=0;k<n;k++)    // loop through array 
            printf("%d ",x[k]); // display the elements already sorted
        printf("\n"); // when the array is displayed, insert a \n so that the next display will be on a new line
        
    

【讨论】:

你的代码插入排序如何而他的代码不是?两者相似,唯一的区别是循环的类型。【参考方案2】:

将它放在外部 for 语句的末尾,紧随 ar[j + 1] = temp;在for循环结束之前

【讨论】:

以上是关于C 编程:如何实现插入排序?的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序——用指针实现

c语言实现哈希排序代码

插入排序算法及C语言实现

插入排序-C#实现

C语言试题八十九之实现插入排序算法

C语言试题八十九之实现插入排序算法