c\#가장 간결 하고 빠 른 정렬 을 실현 합 니 다(당신 은 충분히 알 수 있 습 니 다)
알고리즘 은 프로그래머 의 중요성 에 대해 말 하지 않 아 도 알 수 있 습 니 다.오늘 저 는 알고리즘 중의 기본 알고리즘 을 공유 하고 빠 른 정렬 을 하 겠 습 니 다.프로그래머 로 서 모두 가 낯 설 지 않다 고 믿 지만 맨손으로 한꺼번에 쓰 는 것 은 어 려 울 것 같 습 니 다.그렇게 쓸데없는 말 이 많 지 않 으 니,나 는 먼저 개념 을 간단하게 줄 일 게.
빠 른 정렬 알고리즘 설명:
원시 배열 L1 은 그 중에서 기준 수 F(보통 첫 번 째 선택)를 임의로 선택 하고 F 보다 작은 데 이 터 는 F 의 왼쪽 에 배열 minList 로 기록 하 며 F 보다 큰 데 이 터 는 F 의 오른쪽 에 배열 max List 로 기록 합 니 다.그렇게
L1=minList+F+maxList
그리고 minList 와 max List 에 대해 서 는 minList 와 max List 의 요소 개수 가 1 또는 0 일 때 까지 이러한 작업 을 합 니 다.
1.C\#인터넷 에서 현재 가장 간결 한 실현 방식:
지금 은 바로 산법 의 실현 을 진행 해 야 한다.분명 하 다.여기 서 재 귀 라 는 사상 을 사용 해 야 한다.우 리 는 프로 그래 밍 언어 지식 도구,알고리즘 이 핵심 이라는 것 을 알 고 있 지만 서로 다른 프로 그래 밍 언어 실현 알고리즘 은 크게 다르다(간결 정도).현재 인터넷 에 서 는 c\#의 빠 른 정렬 을 실현 하 는 방식 이 매우 많 습 니 다.간단하게 찾 아 보 니 보통 100 줄 정도 의 코드 가 필요 합 니 다(c 와 c+의 코드 줄 수 는 적 습 니 다).이것저것 찾다 가 마침내 하 나 를 찾 았 습 니 다.다음 과 같이 붙 여 주세요.
static void QuickSort(ref List<int> nums, int left, int right)
{
if (left < right)
{
int i = left;
int j = right;
int middle = nums[(left + right) / 2];
while (true)
{
while (i < right && nums[i] < middle) { i++; };
while (j > 0 && nums[j] > middle) { j--; };
if (i == j) break;
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
if (nums[i] == nums[j]) j--;
}
QuickSort(ref nums, left, i);
QuickSort(ref nums, i + 1, right);
}
}
하지만 정말 읽 기 어렵 습 니 다.정말 시험장 에서 이 코드 를 써 야 합 니 다.한 번 에 맞 출 수 있 을 지 모 르 겠 습 니 다.2.python 의 실현 방식:
python 저도 접촉 이 있 습 니 다.그래서 제 가 python 으로 이 알고리즘 의 코드 를 썼 을 때 정말 느낌 이 들 었 습 니 다.정말 TM 간단 하 죠?프로 그래 밍 경험 이 있 는 친구 들 도 아래 의 python 코드 를 알 아 볼 수 있 을 것 입 니 다.
def quicksort(array):
if len(array) < 2:
return array ------ : “ ”
else:
pivot = array[0] ------
less = [i for i in array[1:] if i <= pivot] ------
greater = [i for i in array[1:] if i > pivot] ------
return quicksort(less) + [pivot] + quicksort(greater)
print quicksort([10, 5, 2, 3])
몇 줄 의 코드 가 짧 고 명료 하 다.주요 코드 는 바로 배열 이 직접 연산 할 수 있다 는 것 이다quicksort(less) + [pivot] + quicksort(greater)
3.C\#스스로 실현 하 는 가장 쉬 운 방식그럼 우리 c\#어 려 운 코드 만 써 야 되 는 거 야?드디어 나 도 찾 았 다.아래 에 내 가 쓴 c\#코드 가 붙 어 있다.
public class Extend :List<int>
{
public static Extend operator +(Extend L1, Extend L2)
{
L1.AddRange(L2);
return L1;
}
}
static Extend QuickSort2(Extend nums)
{
if (nums.Count < 2)
{
return nums;
}
else
{
Extend minList = new Extend();//
Extend maxList = new Extend();//
int f = nums[0];
for (int i = 1; i < nums.Count; i++)
{
if (nums[i] <= f) minList.Add(nums[i]);
else maxList.Add(nums[i]);
}
return QuickSort2(minList) + new Extend() { f} + QuickSort2(maxList);// , +
}
}
실제로 두 단계 만 조작 하면 python 과 같은 간결 함 을 실현 할 수 있 습 니 다!첫 번 째:리스트
두 번 째:+연산 자 를 다시 썼 습 니 다.
어떤 학생 이 Extended 류 중의 AddRange 방법 에 대해 메모리 상의 의문 을 제 기 했 고 저도 대답 을 했 습 니 다.알고리즘 은 시간 복잡 도 에 대한 고찰,즉 과정 에 대한 고찰 입 니 다.메모리 소 모 는 코드 에 따라 다 를 수 있 지만 알고리즘 에 영향 을 주지 않 습 니 다.물론 저도 Extend 를 개선 하 였 습 니 다.왜냐하면 실제 최종 덧셈 연산 에서 minList 와 maxList 는 모두 하나의 요소 만 있 거나 요소 가 없 기 때 문 입 니 다.
public class Extend :List<int>
{
private static Extend k = new Extend();
public static Extend operator +(Extend L1, Extend L2)
{
if (L1.Count == 1) k.Add(L1[0]);
if (L2.Count == 1) k.Add(L2[0]);
return k;
//L1.AddRange(L2);
//return L1;
}
}
나머지 는 python 코드 와 기본적으로 일치 하고 코드 가 명확 합 니 다.내 가 관찰 한 바 에 의 하면 c\#나 같은 방식 으로 이 루어 진 것 인 데,현재 이 한 몫 만 받 으 면 고 맙 지 않 아!마지막 으로 한 마디 하 겠 습 니 다.어쩐지 python 이 지금 이렇게 핫 하 더 라 니 코드 가 정말 간단 하 더 라 고요.그러나 가장 프로그래머 인 우 리 는 언어 는 도구 일 뿐 우리 가 언어의 주재자 라 는 것 을 항상 기억 해 야 한다.코드 뒤의 사상 을 이해 하 는 것 이 왕도 다!
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.