字符串的插入排序(降序)

时间:2014-01-26 12:50:03

标签: c sorting insertion-sort

对于排序字符串的插入排序,我遇到strcpy正确更新temp,Ai和Aj的问题...

for (int j = 1; j < m; j++) {
   int i = j - 1;
   char temp[MAX_LEN]; //= arrayIn[j];
   char Ai[MAX_LEN];
   char Aj[MAX_LEN];

   strcpy(temp,arrayIn[j]);
   strcpy(Ai,arrayIn[i]);
   strcpy(Aj,arrayIn[j]);

   while (i >= 0 && strcmp (Ai, temp) < 0 /* Aj < Ai */) {
      arrayIn[i+1] = arrayIn[i];
      i = i - 1;
   }

   arrayIn[i+1] = temp;
}

示例输出:

输入:

array[0]:    one
array[1]:    two
array[2]:    three
array[3]:    four
array[4]:    five

输出:

array[0]:    five
array[1]:    five   
array[2]:    one
array[3]:    five
array[4]:    five

期望的输出:

array[0]:    five
array[1]:    for
array[2]:    one
array[3]:    three
array[4]:    two

1 个答案:

答案 0 :(得分:0)

如果您打算使用strcpy,则必须使用它:

for (int j = 1; j < m; j++) {
   int i = j - 1;
   char temp[MAX_LEN];

   strcpy(temp, arrayIn[j]);

   while (i >= 0 && strcmp (arrayIn[i], temp) < 0) {
      strcpy(arrayIn[i+1], arrayIn[i]);
      i = i - 1;
   }

   strcpy(arrayIn[i+1], temp);
}

如果你的数组是一个char数组的数组,就可以了。如果你有一个指向char的指针数组,你可以像使用整数那样编写带有赋值的排序:

for (int j = 1; j < m; j++) {
   int i = j - 1;
   char *temp;

   temp = arrayIn[j];

   while (i >= 0 && strcmp(arrayIn[i], temp) < 0) {
      arrayIn[i+1] = arrayIn[i];
      i = i - 1;
   }

   arrayIn[i+1] = temp;
}

但是,仍然必须使用strcmp检查排序条件。请注意,在第二种情况下,指针可能指向常量不可变字符串。