我需要在数组中的数字之间进行排序。
input.txt中: 0005 0006 FFFF 0007 0003 FFFF 0004 技术 0001 FFFF 0000
并输出应为: 000 0005 0006 0000 0003 0005 0006 0007 0000 0001 0002 0003 0004 0005 0006 0007
输出中的FFFF为0000,并在它们之间进行排序,但要使用整数组的数字。 我的代码以递增的方式对它们进行排序,这不是对应的输出。 0001 0002 0003 0004 0005 0006 0007 FFFF FFFF FFFF
// sort the integers
for(i = 1; i < count; i++)
{
temp = array[i];
j = i - 1;
while( (temp < array[j])&&(j >= 0))
{
array[j + 1] = array[j];
j = j - 1;
}
array[j + 1] = temp;
}
for (i=0; i<count; i++)
{
printf("%04X ", array[i]);
}
答案 0 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
#define MAX_DATA_SIZE 100
int main(void){
const uint16_t block_end = 0xFFFF, input_end = 0x0000;
uint16_t array[MAX_DATA_SIZE] = {0}, input_value;
int count = 1;//array[0] = 0x0000
FILE *fp = fopen("input.txt", "r");
while(fscanf(fp, "%" SCNx16, &input_value)==1){
if(input_value == block_end){
for(int i = 0; i < count; ++i){
printf("%04" PRIx16 "\n", array[i]);
}
} else if(input_value == input_end){
break;
} else {
array[count++] = input_value;
for(int i = count-1; i > 0 && array[i-1] > array[i]; --i){
uint16_t temp = array[i];
array[i] = array[i-1];
array[i-1] = temp;
}
if(count == MAX_DATA_SIZE){
fprintf(stderr, "There is a need to increase the size of the array.\n");
exit(1);
}
}
}
fclose(fp);
return 0;
}