>  기사  >  php教程  >  버블 정렬의 세 가지 구현

버블 정렬의 세 가지 구현

高洛峰
高洛峰원래의
2016-12-19 13:15:361309검색

버블 정렬은 이해하고 구현하기가 매우 쉽습니다. 예를 들어 작은 것부터 큰 것까지 정렬합니다.

배열 길이가 N이라고 가정합니다.

1. 인접한 두 데이터를 비교하여 전자의 데이터가 후자의 데이터보다 크면 두 데이터를 교환합니다.

2. 이러한 방식으로 0번째 데이터를 배열의 N-1번째 데이터로 이동한 후 가장 큰 데이터가 배열의 N-1번째 위치로 "싱크"됩니다.

3. N=N-1, N이 0이 아니면 이전 두 단계를 반복하고, 그렇지 않으면 정렬이 완료됩니다.

정의에 따라 코드를 작성하는 것은 쉽습니다.

//冒泡排序1  
void BubbleSort1(int a[], int n)  
{  
       int i, j;  
       for (i = 0; i < n; i++)  
              for (j = 1; j < n - i; j++)  
                     if (a[j - 1] > a[j])  
                            Swap(a[j - 1], a[j]);  
}

최적화하고 이번 여행에서 스왑이 발생하면 플래그를 설정하고, 그렇지 않으면 false를 설정하겠습니다. . 당연히 한 번의 여행에서 교환이 발생하지 않으면 분류가 완료된 것입니다.

//冒泡排序2  
void BubbleSort2(int a[], int n)  
{  
       int j, k;  
       bool flag;  
  
       k = n;  
       flag = true;  
       while (flag)  
       {  
              flag = false;  
              for (j = 1; j < k; j++)  
                     if (a[j - 1] > a[j])  
                     {  
                            Swap(a[j - 1], a[j]);  
                            flag = true;  
                     }  
              k--;  
       }  
}

좀 더 최적화를 해보자. 100개 숫자의 배열이 있고 처음 10개만 순서가 지정되지 않고 다음 90개는 정렬되어 모두 처음 10개 숫자보다 큰 경우 첫 번째 순회 후 교환이 발생한 마지막 위치는 10보다 작아야 합니다. , 그리고 이 위치 이후의 데이터는 순서대로 기록되어야 합니다. 두 번째로 배열의 헤드에서 이 위치까지 이동하면 됩니다.

//冒泡排序3  
void BubbleSort3(int a[], int n)  
{  
    int j, k;  
    int flag;  
      
    flag = n;  
    while (flag > 0)  
    {  
        k = flag;  
        flag = 0;  
        for (j = 1; j < k; j++)  
            if (a[j - 1] > a[j])  
            {  
                Swap(a[j - 1], a[j]);  
                flag = j;  
            }  
    }  
}

버블 정렬은 결국 비효율적인 정렬 방법이고 데이터 크기가 작을 때 사용할 수 있습니다. 데이터 크기가 비교적 큰 경우에는 다른 정렬 방법을 사용하는 것이 가장 좋습니다.


버블 정렬의 세 가지 구현과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.