본문 바로가기

알고리즘/알고리즘 이론

퀵 정렬

https://www.youtube.com/watch?v=gBcUO_6JXIA&list=PLRx0vPvlEmdDHxCvAQS1_6XV4deOwfVrz&index=6

https://m.blog.naver.com/ndb796/221226813382

 

5. 퀵 정렬(Quick Sort)

지난 시간까지 다루었던 선택 정렬, 버블 정렬, 삽입 정렬 알고리즘은 모두 시간 복잡도 O(N^2)을 가지는...

blog.naver.com

퀵 정렬은 선택 정렬, 버블 정렬, 삽입 정렬에 비해 가장 빠르게 원소를 정렬할 수 있다.

 

 

#include <iostream>

int number =10;
int data[] = {1,10,5,8,7,6,4,3,2,9};

void show(){
  int i;
  for(i=0; i<number; i++){
    printf("%d ", data[i]);
  }
}

void quickSort(int *data, int start, int end){
  if(start >= end){ // 원소가 1개인 경우 그대로 두기
    return;
  }
  
  int key=start;
  int i= start+1;
  int j=end;
  int tmp;

  while(i<= j){ //  엇갈릴 때까지 반복
    while(i<= end && data[i] <= data[key]){ // 키 값보다 큰 값을 만날때까지
      i++;
    }
    while(j>start && data[j]>= data[key]){ // 키 값보다 작은 값을 만날때까지
      j--;
    }
    if(i>j){ // 현재 엇갈린 상태면 키 값과 교체
      tmp =data[j];
      data[j]= data[key];
      data[key]=tmp;
    }
    else { // 엇갈리지 않았다면 i와 j를 교체
      tmp = data[i];
      data[i] = data[j];
      data [j] = tmp;
    }
  }
  
  quickSort(data, start, j-1);
  quickSort(data, j+1, end);
}



int main() {
  quickSort(data, 0, number-1);
  show();
  return 0;
}

 

'알고리즘 > 알고리즘 이론' 카테고리의 다른 글

삽입 정렬  (0) 2020.06.08
버블 정렬  (0) 2020.06.08
선택 정렬  (0) 2020.06.06