C 언어: 배열수 그룹의 세 가지 방법: 거품법, 선택법, 삽입법

제목 출처: Caleb Sung

주의 사항

  • 정렬 과정에서 큰 것에서 작은 것, 작은 것에서 큰 것까지의 정렬 방식은 순환체에서if의 두 수의 크기 관계로 지정할 수 있으며 효과를 실제적으로 실천해 볼 수 있다.
  • 실례적인 코드는 모두 10개의 숫자의 정렬입니다. 다른 숫자 길이의 정렬 수요가 있으면 코드의 숫자를 바꾸면 됩니다.

  • 거품법


    알고리즘 분석


    만약 n개의 수가 있다면 n-1번의 비교를 진행해야 한다.첫 번째 비교에서 n-1차 인접 원소의 두 개를 비교하고 첫 번째 j차 비교에서 n-j차 두 개를 비교한다.비교의 순서는 이동한 후에 한 번의 비교를 거친 후에 최치침하(마지막 원소의 위치로 바꾸기), 최대치침하는오름차순, 최소치침하는강차순이다.

    알고리즘 특징


    서로 인접한 원소를 두 번 비교하면 매 번에 최치를 바닥에 가라앉히면 결과의 위치를 확정할 수 있고 원소의 위치를 확정하는 순서는 뒤에서 앞으로 하고 나머지 원소는 상대적인 위치를 조정할 수 있다.오름차순 또는 내림차순으로 정렬할 수 있습니다.

    참조 코드

    # include 
    main()
    {
        int a[10],i,j,t;
        printf("Please input 10 numbers: ");
        /*     */
        for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    
      /*  */
        for(j=0;j<9;j++)    /*         ,n   n-1 */
            for(i=0;i<9-j;i++)   /*          , j   n-j */
                if(a[i]>a[i+1])    /*      ,     */
                {
                    t=a[i];
                    a[i]=a[i+1];
                    a[i+1]=t;
                }
    
      /*      */
        printf("The sorted numbers: ");
        for(i=0;i<10;i++)
        printf("%d   ",a[i]);
        printf("
    "
    ); }

    선택법


    알고리즘 분석


    매번 최치와 무질서 서열의 첫 번째 수를 교환하고 n개의 수는 모두 n-1번을 선택한다.첫 번째 i회에서는 i를 최치 하표로 가정한 다음에 최치와 i+1을 최후의 수로 비교하여 최치의 하표를 찾아낸다. 최치 하표가 초설값이 아니라면 최치 요소와 최치 요소가 i로 표시된 요소를 교환한다.

    알고리즘 특징


    각 행은 결과 시퀀스의 위치를 결정하는 최다치를 선택하고, 요소의 위치는 에서 뒤로 이동하며, 각 행은 최대 한 번 교환되며, 나머지 요소의 상대적인 위치는 변경되지 않습니다.내림차순 또는 오름차순으로 정렬할 수 있습니다.

    참조 코드

    # include 
    main()
    {
        int a[10],i,j,k,t,n=10;
      printf("Please input 10 numbers:");
      for(i=0;i<10;i++)
        scanf("%d",&a[i]);
      for(i=0;i1;i++)   /*       ,n   n-1 */
        {
            k=i;             /*             ,  k  */
            for(j=i+1;j/*                */
                if(a[k]/*그 뒤에 가장 큰 값이 있는 경우*/
    k=j;         /*아래 */
    만약 (k!=i)/* k가 최초의 i값이 아니라면 그 다음에 그보다 더 큰 수를 찾을 수 있음을 의미합니다 */
    {  t=a[k];  a[k]=a[i];  a[i]=t;  } /*최소값과 현재 시퀀스의 첫 번째 개수를 교환합니다 */
    }
    printf("The sorted numbers: ");
    for(i=0;i<10;i++)
    printf("%d   ",a[i]);
    printf("");
    }

    삽입법


    알고리즘 분석


    서열을 질서 서열과 무질서 서열로 나누어 순서대로 무질서 서열에서 원소 값을 꺼내 질서 서열의 적당한 위치에 삽입한다.처음에는 질서 서열 중 첫 번째 수만 있고 나머지 n-1개는 무질서 서열을 구성하면 n개수는 n-1회 삽입해야 한다.질서 서열에 삽입된 위치를 찾으면 질서 서열의 마지막 수에서 앞으로 찾을 수 있고 삽입점을 찾지 못하기 전에 원소를 동시에 뒤로 이동할 수 있으며 삽입 원소를 위한 공간을 준비할 수 있습니다.

    알고리즘 특징


    매번 무질서 서열에서 첫 번째 수를 꺼내 질서 서열의 적당한 위치에 삽입하고 원소의 최종 위치는 마지막 삽입 후에야 위치를 확정할 수 있다.또한 삽입 위치를 앞뒤로 또는 뒤쪽으로 이동할 수 있는 순환을 사용한 다음 삽입 위치 뒤의 요소(시퀀스 중)를 하나씩 뒤로 이동한 다음 삽입을 완료합니다.이 알고리즘의 특징은 삽입 위치를 찾는 동시에 원소의 이동을 완성하는 것이다.원소의 이동은 반드시 뒤에서 앞으로 해야 하기 때문에 두 가지 조작을 결합하여 완성하여 알고리즘의 효율을 높일 수 있다.오름차순 또는 내림차순으로 정렬할 수 있습니다.

    참조 코드

    # include 
    main()
    {
        int a[10],i,j,t;
        printf("Please input 10 numbers: ");
        for(i=0;i<10;i++)
        scanf("%d",&a[i]);
        for(i=1;i<10;i++) /*       ,n    2          n-1   */
        {
            t=a[i];     /*          t */
            for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /*     (  0 ~ i-1)       */
                a[j+1]=a[j]; /*        ,           */
            a[j+1]=t;        /*      ,    */
        }
        printf("The sorted numbers: ");
        for(i=0;i<10;i++)
            printf("%d   ",a[i]);
        printf("
    "
    ); }

    좋은 웹페이지 즐겨찾기