>  기사  >  백엔드 개발  >  칵테일 정렬(이중 버블 정렬, 교반 정렬 또는 리플 정렬)

칵테일 정렬(이중 버블 정렬, 교반 정렬 또는 리플 정렬)

黄舟
黄舟원래의
2017-02-09 16:22:072714검색

칵테일 정렬(이중 버블 정렬, 교반 정렬 또는 리플 정렬)

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;namespace Sort  
{  
    class CockTailSorter  
    {  
        private static int[] myArray;  
        private static int arraySize;  
        public static int[] Sort(int[] myArray)  
        {  
            arraySize = myArray.Length;  
            CockTailSort(myArray);  
            return myArray;  
        }  
        public static void CockTailSort(int[] myArray)  
        {  
            int low, up, index, i;  
            low = 0;//数组起始索引  
            up = myArray.Length - 1;//数组索引最大值  
            index = low;//临时变量  
       //判断数组中是否有多个元素  
            while (up > low)//每一次进入while循环都会找出相应范围内最大最小的元素并分别放到相应的位置  
            {  
        //进入该for循环会将索引限定范围内最大的元素放到最右边  
                for (i = low; i < up; i++)//从上向下扫描  
                {  
                    if (myArray[i] > myArray[i + 1])  
                    {  
                        Swap(ref myArray[i], ref myArray[i + 1]);  
                        index = i;//记录当前索引  
                    }  
                }  
                up = index;//记录最后一个交换的位置  
        //进入该for循环会将索引限定范围内最小的元素放到最左边  
                for (i = up; i > low; i--)//从最后一个交换位置从下往上扫描  
                {  
                    if (myArray[i] < myArray[i - 1])  
                    {  
                        Swap(ref myArray[i], ref myArray[i - 1]);  
                        index = i;  
                    }  
                }  
                low = index;//记录最后一个交换的位置  
            }  
        }  
        private static void Swap(ref int left, ref int right)  
        {  
            int temp;  
            temp = left;  
            left = right;  
            right = temp;  
        }  
    }  
}

칵테일 정렬은 버블 정렬을 약간 변형한 것과 같습니다. 차이점은 낮은 것에서 높은 것, 그리고 높은 것에서 낮은 것 순으로 버블 정렬은 순서의 각 요소를 낮은 것부터 높은 것까지만 비교한다는 것입니다. 버블 정렬은 한 방향(낮음에서 높음으로)으로만 비교하고 각 주기에서 하나의 항목만 이동하기 때문에 버블 정렬보다 약간 더 나은 성능을 얻을 수 있습니다.

칵테일 정렬을 사용하면 배열의 숫자가 불규칙하게 배열됩니다. 먼저 가장 작은 숫자를 찾아서 먼저 넣은 다음 가장 큰 숫자를 찾아 마지막에 넣습니다. 그런 다음 두 번째로 작은 숫자를 찾아 두 번째 위치에 넣고, 두 번째로 큰 숫자를 찾아 마지막에서 두 번째 위치에 놓습니다. 정렬이 완료될 때까지 계속됩니다.


위는 칵테일 정렬(이중 버블 정렬, 교반 정렬 또는 리플 정렬)에 대한 내용입니다. 자세한 내용은 PHP 중국어 홈페이지(www. .php.cn) !


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