Programing/C- programing

정렬 - bubble sort. 거품정렬

sosal 2010. 8. 22. 20:30
반응형

/*
 http://sosal.tistory.com/
 * made by so_Sal
 */

거품정렬입니다.

[][][][][][][][] <-- 여기서 최대값을 가장 오른쪽으로
[][][][][][][]■  <-- 최대값 하나를 찾아으니, 나머지 중 최대값을 가장 오른쪽으로
[][][][][][]■ ■  <-- 이런식으로 하나씩 하나씩 최대값을 오른쪽으로 옮기는것
[][][][][]■ ■ ■ 
[][][][]■ ■ ■ ■ 
[][][]■ ■ ■ ■ ■ 
[][]■ ■ ■ ■ ■ ■  <-- 2개밖에 남질 않았습니다. 높은것을 오른쪽으로..
[]■ ■ ■ ■ ■ ■ ■  <-- 이미 맨 왼쪽은 최소값이겠죠?

거품이 오른쪽부터 뽀글뽀글 올라오는 모습이 연상된다고
거품정렬이란 이름이 붙었습니다;
흠.. 잘 모르겠네영 -.-;;

#include<iostream>
#include<ctime>
using namespace std;

void swap(int *a,int *b){
    int tmp;
    tmp = *b;
    *b = *a;
    *a = tmp;
}              //sort 하는 과정에서 swap을 구현하면 소스가 지져분해지므로 이렇게 함수를 만듬.

void bubble(int *a,int length){
    for(int i=0;i<length-1;i++){
        for(int j=0;j<length-(i+1);j++) //이미 가장 오른쪽 정렬이 되어있기 때문에 length-(i+1)까지
            if(a[j] > a[j+1])
                swap(a[j],a[j+1]); //두칸씩 비교해나가면서 높은걸 오른쪽으로!
    }
}

int main(){
    int a[30];
    srand(time(0));
   
    for(int i=0;i<15;i++)
        a[i] = rand()%100;   //15개의 숫자를 마구잡이로 집어넣음

    bubble(a,15);  //정렬 후

    for(int i=0;i<15;i++)
        printf("%d ",a[i]); //출력!

   
    return 0;
}