반응형
랜덤으로 수를 생성한다 8자리까지.
수가 2개가 되면 양쪽을 비교하여 홀수일 경우 비트연산을 통해 왼쪽으로 이동시킨다.
비트연산 mask 기법을 사용.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
입력받은 8자리 정수 홀수, 짝수 나눠서 내림차순 정렬하기
*/
int main(void)
{
char input = 0; // input : rand함수로 부터 입력받는 값
unsigned int sort_a = 0, sort_b = 0; // sort_a : 정렬된 정수, sort_b : 입력받은 정수
unsigned int a = 0, b = 0; // a, b : 2개의 정수 비교 변수(a - 낮은 자릿수, b- a보다 1자리 높은 자릿수)
int i = 0, j = 0; // i, j : for문 조건 변수
int mask = 0x0000000f; // mask : 비교한 자릿수를 0으로 채우기 위한 마스크값
srand((unsigned)time(NULL));
/*0~9까지 랜덤한 정수를 변수에 입력*/
for (i = 0; i < 8; i++)
{
input = rand() % 10;
sort_b = sort_b << 4;
sort_b = sort_b + input;
sort_a = sort_b;
printf("%08x\n", sort_b);
}
printf("\n");
/*4bit(nibble) 한자리씩 비교를 위한 for문 */
for (j = 6; j >= 0; j--)
{
/*각각의 자릿수와 그 앞자릿수를 이동시켜서 a와 b에 저장*/
for (i = 0; i < j + 1; i++)
{
a = (sort_a & (15 << i * 4));
a = a >> i * 4;
b = (sort_a & (15 << (i + 1) * 4));
b = b >> (i + 1) * 4;
/*
printf("%08x\n", a);
printf("%08x\n", b);
*/
/*a와 b가 홀수인지 짝수인지 구분하여 홀수이면 왼쪽으로 이동*/
if (a % 2 > b % 2)
{
sort_a = sort_a & ~(mask << (i + 1) * 4);
sort_a = sort_a | a << (i + 1) * 4;
sort_a = sort_a & ~(mask << i * 4);
sort_a = sort_a | b << i * 4;
/*printf("%08x\n", sort_a);*/
}
/*a와 b가 홀수 또는 짝수로 같을 때 내림차순으로 정렬*/
if (a % 2 == b % 2)
{
if (a > b)
{
sort_a = sort_a & ~(mask << (i + 1) * 4);
sort_a = sort_a | a << (i + 1) * 4;
sort_a = sort_a & ~(mask << i * 4);
sort_a = sort_a | b << i * 4;
/*printf("%08x\n", sort_a);*/
}
}
}
}
printf("======================\n");
printf("입력된 정수 : %08x\n", sort_b);
printf("정렬된 정수 : %08x\n", sort_a);
printf("======================\n");
return 0;
}
(결과1 )
홀수 4자리는 모두 왼쪽으로 이동, 짝수 4자리는 모두 오른쪽으로 이동되었다.
홀수도 내림차순, 짝수도 내림차순 정렬 이다.
(결과 2)
한번 더 돌려도 마찬가지, 홀수가 5개이니, 5개는 왼쪽으로 내림차순 정렬, 짝수 3개는 오른쪽 내림차순 정렬
(랜덤으로 생성한 숫자를 내림차순 정렬하기)
https://ansan-survivor.tistory.com/909
반응형
'C언어 \ C++' 카테고리의 다른 글
[C언어] C언어를 통한 메모리 구조 이해, c언어 동작 순서 이해 (0) | 2021.09.24 |
---|---|
[C언어] 2차원 오름차순 행렬 sort 정렬, C lanugae sort for array (1) | 2021.09.20 |
[C언어] 랜덤으로 생성한 8자리 수를 내림차순 정렬하기 예제 (0) | 2021.09.20 |
[C언어] 비트연산자를 이용한 10진수를 2진수로 변환, decimal to binary (0) | 2021.09.19 |
[C언어] 10진수를 2진수로 변환, decimal to Binary code (0) | 2021.09.19 |