C++ 데이터 정렬

2014.06.15 00:07

엘카 조회 수:422

참고 문서  
특별한 key 값을 비교하여 차례대로 나열하는 것 
정렬에는 오름 차순과 내림 차순이 있다. 
오름 차순 : 순서가 작은 것에서 큰 순으로 배열하는 것 
내림 차순 : 순서가 큰 것에서 작은 순으로 배열하는 것 
 
 정렬(Sort) 
 버블정렬(Bubble Sort) 
배열의 가장 처음 요소에서부터 인접해 있는 두 요소끼리 비교를 해서 자리를 
맞바꾸는 방식으로 하는 정렬 
일단 한번의 루프를 돌면, 가장 큰 요소가 배열의 가장 끝에 놓이게 된다. 
그 다음에는 가장 큰 요소를 제외한 배열의 요소끼리 앞의 방식대로 비교를  
   해서 그 중에서 큰 요소(전체에서는 두 번째로 큰 요소)를 비교한 배열의 끝 
   (끝에서 두 번째)에 놓는다. 
이런 식으로 반복을 계속하면 데이터가 오름 차순으로 정렬된다. 
 
 
 #include <stdio.h> 
 
int main(void) 
{ 
  int data[5]={94,9,67,1,120};    
  int i,j,tmp;    
  for(i=0;i<5;i++)       
    printf("%8d",data[i]);    
  printf("\n");    
  for(i=0 ; i<4 ; i++)       
    for(j=0 ; j<4-i ; j++)         
      if(data[j] > data[j+1])          /* 오름 차순 */  
      /*  if(data[j] < data[j+1])  */  /* 내림 차순 */
          {            
             tmp=data[j];           
             data[j]=data[j+1];            
             data[j+1]=tmp;           
          };   
 
 printf("sort result ...\n");    
  for(j=0;j<5;j++)             /* 정렬된 결과 출력 */ 
    printf("%8d",data[j]);    
  printf("\n"); 
   
  return 0; 
} 



퀵 정렬(Quick Sort)

함수 qsort() 

함수의 원형 

void qsort(void *base, size_t num, size_t size, 

           int(*compare)(const void*, const void*)); 

퀵 정렬(quick sort) 알고리즘을 이용하여 base가 가리키는 배열을 정렬한다. 

알고리즘이 멈추면 배열의 데이터가 정렬된다. 

배열 내의 원소의 수는 num에 의해 지정되고, 각 원소의 크기는 size로 지정된다. 

compare가 가리키는 함수는 배열에 있는 2개의 원소를 비교하기 위해 사용되며, 

     형식은 다음과 같다. 

int function_name(const void *arg1, const void *arg2); 

arg1이 arg2보다 작은 경우, 0보다 작은 값을 반환한다. 

arg1과 arg2가 같은 경우, 0을 반환한다. 

arg1이 arg2보다 큰 경우, 0보다 큰 값을 반환한다. 

#include <stdio.h> 
#include <stdlib.h> 
 
int comp(const void *i,const void *j); 
int main(void) 
{ 
   int data[5]={94,9,67,1,120};    
   int i,j,tmp;    
 
   for(i=0;i<5;i++)       
      printf("%8d",data[i]);    
   printf("\n");       
 
   qsort(data,5,sizeof(int),comp);       
   printf("sort result ...\n");    
   for(j=0;j<5;j++)       
      printf("%8d",data[j]);    
   printf("\n");   
   return 0;       
} 
int comp(const void *i,const void *j) 
{     return *(int *)i - *(int *)j; 
} 



C 언어에서 배열과 함께 알아야 할 것은 메모리 주소에 대한 개념

배열 변수 명은 그 배열의 선두주소를 갖는 포인터 상수

번호 제목 날짜 조회 수
43 구조체 포인터 2014.06.15 926
42 구조체의 선언과 데이터 입·출력 2014.06.15 3080
41 함수 포인터 2014.06.15 438
40 배열과 포인터 2014.06.15 402
39 포인터 연산 2014.06.15 383
38 포인터 변수 2014.06.15 411
» 데이터 정렬 2014.06.15 422
36 배열 초기화 2014.06.14 627
35 2차원 배열 2014.06.14 667
34 문자열 처리 함수 2014.06.14 407
33 문자열 입출력 함수 2014.06.14 435
32 접근 수정자 2014.06.14 819
31 전역 변수 2014.06.14 305
30 지역 변수(local variable) 2014.06.14 291
29 변수와 메모리 저장 위치 2014.06.14 423
28 비트 연산자 2014.06.14 284
27 관계 연산자와 논리 연산자 2014.06.14 467
26 증감 연산자 2014.06.14 316
25 printf() 함수의 형식 지정자 2014.06.14 7520
24 열거 형 변수의 이해 2014.06.14 465