php教程 PHP开发 정렬 알고리즘 소개: 버블 정렬

정렬 알고리즘 소개: 버블 정렬

Dec 19, 2016 pm 01:13 PM
버블 정렬

개발 중에는 일련의 데이터를 순서대로 정렬해야 하는 경우가 많으므로 여러 가지 또는 그 이상의 정렬 알고리즘을 반드시 숙지해야 합니다.

이 기사에서는 정렬을 소개합니다. 더 간단한 알고리즘 중 하나: 버블 정렬

먼저 가장 간단한 아이디어를 사용하여 정렬을 구현해 보고 버블 정렬을 비교하고 배우십시오.

문제: 크기가 10인 배열 내의 데이터가 있는 배열이 있다고 가정합니다. 요소(int str[10])는 순서가 없습니다. 이제 이 정렬되지 않은 배열을 작은 것부터 큰 것까지 정렬된 배열(아래 첨자 0부터 시작)로 프로그래밍해야 합니다.

아이디어: 질문의 요구 사항에 따르면 올바른 결과는 다음과 같아야 한다는 데는 의심의 여지가 없습니다. 1 2 3 4 5 6 7 8 9 10 이렇게 하려면 가장 간단하고 직접적으로 생각할 수 있는 방법은 비교하고 교환하는 것입니다.


먼저 10개의 숫자 중 가장 작은 숫자를 첨자가 0인 위치에 놓습니다(str[0]).

비교하여 표시된 숫자를 교환합니다. 0(str[0])으로 나머지 9개의 숫자(아래 첨자 0이 있는 위치에 더 작은 숫자 배치)를 사용하여 10개 중에서 가장 작은 숫자를 얻을 수 있습니다.

가장 작은 10개의 숫자가 결정된 후 , 다음 단계는 나머지 9개의 가장 작은 숫자를 찾는 것입니다.

최소 숫자가 정해져 있으므로 str[0]을 건드리지 말고 str[1]부터 바로 시작해서 나머지 8개 숫자와 비교하고 교환한 뒤 9개 숫자 중 가장 작은 숫자를 찾아보세요. 아래 첨자 1이 있는 위치에 있는 숫자(str[1])

이 아이디어를 계속 따르면 이 10개의 숫자를 순서가 지정된(작은 것부터 큰 것까지) 배열로 바꿀 수 있습니다

코드:

#include <stdio.h>  
  
void swap(int *a, int *b); //交换两个数  
  
int main()  
{  
    int     str[10];  
    int     i, j;  
    //初始化数组为10 9 8 7 6 5 4 3 2 1  
    for (i = 0; i < 10; i++)  
    {  
        str[i] = 10 - i;  
    }  
    //排序,从a[0]开始排,从小到大  
    for (i = 0; i < 10; i++)  
    {  
        for (j = i + 1; j < 10; j++)  
        {  
            if (str[i] > str[j])  
            {  
                swap(&str[i], &str[j]);  
            }  
        }  
    }  
        //将十个数输出  
    for (i = 0; i < 10; i++)  
        printf("%d\n", str[i]);  
    return    0;  
}  
void swap(int *a, int *b)  
{  
    int     c;  
     c = *a;  
    *a = *b;  
    *b =  c;  
}
로그인 후 복사

이 방법이 생각하기 쉽습니다. 하지만 단점이 있습니다. 원래 앞쪽에 있던 더 작은 숫자가 뒤쪽으로 바뀌었습니다.


시연:

시작: 9 4 5 6 8 3 2 7 10 1 (아래 첨자는 왼쪽에서 오른쪽으로 각각 0~9입니다.) 위의 절차에 따라 비교하고 교환하세요

처음 : 4 9 5 6 8 3 2 7 10 1

두 번째 : 4 9 5 6 8 3 2 7 10 1

. . . : (교환 없음)

5번째 : 3 9 5 6 8 4 2 7 10 1

6번째 : 2 9 5 6 8 3 4 7 10 1

. . . : (교환 없음)

10번째 : 1 9 5 6 8 3 4 7 10 2

한 번 교환하면 원래 작은 숫자가 앞에 오는 것을 알 수 있습니다. 그러면 뒤쪽에 넣어주세요

그럼 이 단점을 어떻게 해결할까요? 버블 정렬을 사용할 수 있습니다

버블 정렬이란 무엇인가요?

이렇게 이해할 수 있습니다. (작은 것부터 큰 것까지 정렬) 다양한 크기의 버블 10개가 있고, 작은 버블을 아래에서 위로 점차적으로 위쪽으로 이동하여 한 번 순회한 후 가장 작은 버블이 는 맨 위(첨자 0)까지 올라갔다가 다시 아래에서 위로 올라가며 10개의 거품이 순서대로 나타날 때까지 순환이 계속됩니다.

버블 정렬에서 가장 중요한 아이디어는 둘을 비교하고 더 작은 것을 승격시키는 것입니다.

버블 정렬의 최악의 시간 복잡도는 O(n²)

코드:

#include <stdio.h>  
void swap(int *a, int *b);  
int main()  
{  
    int    array[10] = {15, 225, 34, 42, 52, 6, 7856, 865, 954, 10};  
    int    i, j;  
    for (i = 0; i < 10; i++)  
    {  
        //每一次由底至上地上升  
        for (j = 9; j > i; j--)  
        {  
            if (array[j] < array[j-1])  
            {  
                    swap(&array[j], &array[j-1]);  
            }  
        }  
    }  
    for (i = 0; i < 10; i++)  
    {  
        printf("%d\n", array[i]);  
    }  
    return    0;  
}  
void swap(int *a, int *b)  
{  
    int    temp;  
    temp = *a;  
      *a = *b;  
      *b = temp;  
}
로그인 후 복사

버블 정렬 알고리즘은 더 작은 숫자를 위로만 점진적으로 밀어올리므로 기사 앞부분에서 언급한 단점이 발생하지 않으므로 여기서는 설명하지 않습니다.



정렬 알고리즘 및 버블 정렬 시작과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java 데이터 구조 및 알고리즘: 심층 설명 Java 데이터 구조 및 알고리즘: 심층 설명 May 08, 2024 pm 10:12 PM

데이터 구조와 알고리즘은 Java 개발의 기초입니다. 이 기사에서는 Java의 주요 데이터 구조(예: 배열, 연결 목록, 트리 등)와 알고리즘(예: 정렬, 검색, 그래프 알고리즘 등)을 자세히 살펴봅니다. 이러한 구조는 배열을 사용하여 점수를 저장하고, 연결된 목록을 사용하여 쇼핑 목록을 관리하고, 스택을 사용하여 재귀를 구현하고, 대기열을 사용하여 스레드를 동기화하고, 트리 및 해시 테이블을 사용하여 빠른 검색 및 인증을 저장하는 등 실제 사례를 통해 설명됩니다. 이러한 개념을 이해하면 효율적이고 유지 관리가 가능한 Java 코드를 작성할 수 있습니다.

C#에서 버블 정렬 알고리즘을 구현하는 방법 C#에서 버블 정렬 알고리즘을 구현하는 방법 Sep 19, 2023 am 11:10 AM

C#에서 버블 정렬 알고리즘 구현 방법 버블 정렬은 인접한 요소를 여러 번 비교하고 위치를 교환하여 배열을 정렬하는 간단하지만 효과적인 정렬 알고리즘입니다. 이번 글에서는 C# 언어를 사용하여 버블 정렬 알고리즘을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공하겠습니다. 먼저 버블정렬의 기본원리를 이해해보자. 알고리즘은 배열의 첫 번째 요소부터 시작하여 이를 다음 요소와 비교합니다. 현재 요소가 다음 요소보다 크면 위치를 바꾸고, 현재 요소가 다음 요소보다 작으면 그대로 유지합니다.

C++ 함수 포인터로 코드 변환: 효율성과 재사용성 향상 C++ 함수 포인터로 코드 변환: 효율성과 재사용성 향상 Apr 29, 2024 pm 06:45 PM

함수 포인터 기술은 특히 다음과 같이 코드 효율성과 재사용성을 향상시킬 수 있습니다. 효율성 향상: 함수 포인터를 사용하면 중복 코드를 줄이고 호출 프로세스를 최적화할 수 있습니다. 재사용성 향상: 함수 포인터를 사용하면 공통 함수를 사용하여 다양한 데이터를 처리할 수 있으므로 프로그램 재사용성이 향상됩니다.

PHP 배열을 위한 사용자 정의 정렬 알고리즘 작성 가이드 PHP 배열을 위한 사용자 정의 정렬 알고리즘 작성 가이드 Apr 27, 2024 pm 06:12 PM

사용자 정의 PHP 배열 정렬 알고리즘을 작성하는 방법은 무엇입니까? 버블 정렬: 인접한 요소를 비교하고 교환하여 배열을 정렬합니다. 선택 정렬: 매번 가장 작거나 가장 큰 요소를 선택하고 현재 위치와 바꿉니다. 삽입 정렬: 순서가 지정된 부품에 요소를 하나씩 삽입합니다.

다양한 PHP 배열 정렬 알고리즘의 복잡성 분석 다양한 PHP 배열 정렬 알고리즘의 복잡성 분석 Apr 27, 2024 am 09:03 AM

PHP 배열 정렬 알고리즘 복잡도: 버블 정렬: O(n^2) 빠른 정렬: O(nlogn) (평균) 병합 정렬: O(nlogn)

Go 언어의 시간 복잡도와 공간 복잡도 분석 Go 언어의 시간 복잡도와 공간 복잡도 분석 Mar 27, 2024 am 09:24 AM

Go는 쓰기 쉽고, 읽기 쉽고, 유지 관리하기 쉬우면서도 고급 프로그래밍 개념을 지원하도록 설계된 프로그래밍 언어로 점점 더 인기를 얻고 있습니다. 시간 복잡도와 공간 복잡도는 알고리즘과 데이터 구조 분석에서 중요한 개념으로, 프로그램의 실행 효율성과 메모리 크기를 측정합니다. 이번 글에서는 Go 언어의 시간 복잡도와 공간 복잡도를 분석하는 데 중점을 둘 것입니다. 시간 복잡도(Time Complexity) 시간 복잡도는 알고리즘의 실행 시간과 문제 크기 사이의 관계를 나타냅니다. 시간은 일반적으로 Big O 표기법으로 표현됩니다.

C++ 함수 성능 최적화의 알고리즘 선택 및 최적화 기술 C++ 함수 성능 최적화의 알고리즘 선택 및 최적화 기술 Apr 23, 2024 pm 06:18 PM

C++ 기능 성능 최적화 알고리즘 선택: 효율적인 알고리즘(예: 빠른 정렬, 이진 검색)을 선택합니다. 최적화 기술: 작은 함수 인라인, 캐싱 최적화, 전체 복사 방지 및 루프 언롤링. 실제 사례: 배열의 최대 요소 위치를 검색할 때 최적화 후 이진 검색 및 루프 확장을 사용하므로 성능이 크게 향상됩니다.

Java 데이터 구조 및 알고리즘: 클라우드 컴퓨팅에 대한 실용 가이드 Java 데이터 구조 및 알고리즘: 클라우드 컴퓨팅에 대한 실용 가이드 May 09, 2024 am 08:12 AM

클라우드 컴퓨팅에서는 방대한 양의 데이터를 관리하고 처리하기 위해 데이터 구조와 알고리즘을 사용하는 것이 중요합니다. 일반적인 데이터 구조에는 배열, 목록, 해시 테이블, 트리 및 그래프가 포함됩니다. 일반적으로 사용되는 알고리즘에는 정렬 알고리즘, 검색 알고리즘 및 그래프 알고리즘이 포함됩니다. 개발자는 Java의 강력한 기능을 활용하여 Java 컬렉션, 스레드로부터 안전한 데이터 구조 및 Apache Commons 컬렉션을 사용하여 이러한 데이터 구조와 알고리즘을 구현할 수 있습니다.

See all articles