C에서 셸 정렬을 구현했으며 Bubble 정렬보다 약 3 배 빠릅니다. 여기 내 정렬 지속 시간은 초 단위 :쉘 정렬은 버블 정렬보다 3 배 빠릅니다.
For list of 100 integers:
BubbleSort: 0.000333
ShakeSort: 0.000282
QuickSort: 0.000048
QuickSort_Iter: 0.000063
InsertionSort: 0.000188
ShellSort: 0.000150
For list of 1000 integers:
BubbleSort: 0.028191
ShakeSort: 0.019354
QuickSort: 0.000435
QuickSort_Iter: 0.000528
InsertionSort: 0.011917
ShellSort: 0.003664
For list of 5000 integers:
BubbleSort: 0.241116
ShakeSort: 0.222127
QuickSort: 0.001306
QuickSort_Iter: 0.001592
InsertionSort: 0.151656
ShellSort: 0.091002
For list of 10000 integers:
BubbleSort: 0.959580
ShakeSort: 0.872648
QuickSort: 0.002877
QuickSort_Iter: 0.003379
InsertionSort: 0.601329
ShellSort: 0.350866
은 일반 IT 또는 가능성이 내 구현에 문제가?
는 어레이 기반 벡터의 0-999의 의사 랜덤 정수. 나는 모든 조건 하에서 쉘 정렬을위한 모든 합리적인 성능을 가지고 있는지 궁금 할 것입니다. – Jcl
에 상당히 의존 – LynnXe
"모든"조건과 같은 것은 없습니다. 조건은 실제로 중요합니다 ... 첫 번째와 마지막으로 교체 된 숫자를 제외하고는 완전히 정렬 된 숫자 배열을 가지고 있다고 상상해보십시오.이 경우 셸 정렬은 버블 정렬보다 빠를 가능성이 큽니다 (하나의 스왑을 수행 할 수 있기 때문에 버블 정렬은 모든 숫자를 바꿔야 할 것입니다.) ... 그러나 그것은 단 한가지 예입니다. 버블 정렬이 셸 정렬보다 느리거나 빠르다는 것을 의미하지는 않으며, 특정 데이터 세트에 대해서만 의미합니다. 큰 O 문제에서'n'은 많이, :-) – Jcl