数组中数字之间的升序排序

时间:2016-03-20 18:55:29

标签: c arrays sorting hex insertion-sort

我需要在数组中的数字之间进行排序。

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]);
}

1 个答案:

答案 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;
}