她的睫毛 发表于 2020-12-25 20:56:52

有关插入排序的问题

#include <stdio.h>

void print(int a[], int n ,int i)
{
    printf("%d:",i);
    int j;
    for(j=0; j<8; j++){
      printf("%d",a);
    }
    printf("\n");
}


void InsertSort(int a[], int n)
{
    int i;
    for(i= 1; i<n; i++)
    {
      if(a < a)
      {
            int j= i-1;
            int x = a;
            while(j>-1 && a < a) //为什么这里用 a,结果就会出错?
                                        //用x替换a,结果才是正确的         
            {                        
                a = a;
                j--;
            }
            a = x;   
      }
      print(a,n,i);
    }
}
int main(){
    int a = {3,1,7,5,2,4,9,6};
    InsertSort(a,8);
    return 0;
}

倒戈卸甲 发表于 2020-12-25 21:27:18

因为a其实有可能会因为排序的进行而变化,毕竟第一次排序时比较的数字是a和a,有可能立即进行交换,结果就是a变大了,之后的排序都会受到干扰

jackz007 发表于 2020-12-25 21:43:34

本帖最后由 jackz007 于 2020-12-25 21:44 编辑

#include <stdio.h>

void print(int a[] , int n)
{
      int j                                          ;
      printf("%d" , a)                            ;
      for(j = 1 ; j < n ; j ++) printf(" %d" , a) ;
      printf("\n")                                 ;
}

void InsertSort(int a[] , int n)
{
      int i , j , t                                  ;
      for(i = 1 ; i < n ; i ++) {
                for(j = i ; j && a < a ; j --) {
                        t = a                   ;
                        a = a                ;
                        a = t                     ;
                }
      }
}

int main()
{
      int a = {3 , 1 , 7 , 5 , 2 , 4 , 9 , 6}    ;
      InsertSort(a , 8)                           ;
      print(a , 8)                                  ;
}
页: [1]
查看完整版本: 有关插入排序的问题