728x90
- 퀵정렬(Quick sort)이란?
퀵정렬은 피봇을 기준으로 작거나 같은 값을 지닌 데이터는 앞으로, 큰 값을 지닌 데이터는 뒤로 가도록 하여 작은 값을 갖는 데이터와 큰 값을 갖는 데이터로 분리해가며 정렬하는 방법이다.
1. 분할 정복 알고리즘
2. 일반적으로 빠른 알고리즘
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace quicksort
{
class Program
{
static int[] data = { 25, 15, 60, 45, 10, 20, 5, 30 };
static void Main(string[] args)
{
Console.WriteLine("퀵정렬");
Console.Write("시작값 : ");
for(int i = 0; i < data.Length; i++)
{
Console.Write(data[i].ToString() + ", ");
}
Console.WriteLine();
SortQuick(0, data.Length - 1);
Console.Write("정렬값 : ");
for(int i = 0; i < data.Length; i++)
{
Console.Write(data[i].ToString() + ", ");
}
Console.WriteLine();
}
static void SortQuick(int nFirst, int nLast)
{
if(nFirst < nLast)
{
int pivotIndex = FuncPartition(nFirst, nLast);
//분할 정복
SortQuick(nFirst, pivotIndex - 1);
SortQuick(pivotIndex + 1, nLast);
}
}
static int FuncPartition(int nFirst, int nLast)
{
int nLow, nHigh, nPivot;
//양의 값 여기에서는 마지막 값
nPivot = data[nLast];
nLow = nFirst;
nHigh = nLast - 1;
while(nLow <= nHigh)
{
while (data[nLow] < nPivot)
nLow++;
while (data[nHigh] > nPivot)
nHigh--;
if(nLow <= nHigh)
{
Swap(data, nLow, nHigh);
}
}
Swap(data, nLow, nLast);
return nLow;
}
static void Swap(int[] nArrData, int nValue1, int nValue2)
{
int nTemp = nArrData[nValue1];
nArrData[nValue1] = nArrData[nValue2];
nArrData[nValue2] = nTemp;
}
}
}
- 퀵정렬의 특징
- 속도가 빠르다
- 정렬된 리스트에 대해서는 수행시간이 더 오래 걸린다.
728x90
'게임 프로그래밍 > C#' 카테고리의 다른 글
C# 정렬 알고리즘 - 힙정렬(Heap sort) (0) | 2021.12.27 |
---|---|
C# 정렬 알고리즘 - 삽입정렬(Insertion sort) (0) | 2021.12.27 |
C# 정렬 알고리즘 - 버블정렬(Bubble sort) (0) | 2021.12.27 |
C# 정렬 알고리즘 - 선택정렬(Selection sort) (0) | 2021.12.27 |
C# 알고리즘 - 재귀호출(Recursive Call) (0) | 2021.12.27 |