정렬 알고리즘을 사용하여 작업 중이며 quicksort가 임시 변수없이 스왑 함수에서 올바르게 작동하지 않는다는 것을 알았습니다. 아래 코드를 첨부했습니다. 신속하게 작성된 신속한 놀이터에서이 코드를 실행할 수 있습니다. This is the link to execute this code online. 이 정보를 정리하는 데 필요한 기타 정보를 알려주십시오. 누군가가 이것을 설명 할 수 있다면 정말 감사 할 것입니다.임시 변수가없는 스와핑 함수에서 빠른 정렬이 올바르게 작동하지 않습니다.
주 - 스왑 기능에서 두 가지 코드를 주석으로 작성했습니다. 하나는 임시 변수가없고 다른 하나는 임시 변수입니다. 이 코드는 임시 변수가있는 스왑 함수와 완벽하게 작동합니다.
func swap(_ a:inout Int , _ b:inout Int)
{
a = a+b
b = a-b
a = a-b
/*
let x = a
a = b
b = x
*/
}
func partition(_ arr : inout [Int], _ low : Int, _ high : Int)->Int
{
let pivot = arr[high]
var i = low-1
var j = low
while(j<high)
{
if(arr[j]<=pivot)
{
i=i+1
swap(&arr[i],&arr[j])
}
j = j+1
}
swap(&arr[i+1],&arr[high])
return i+1
}
func quickSort(_ arr : inout [Int], _ low : Int, _ high : Int)
{
if low < high
{
let pi = partition(&arr,low,high)
quickSort(&arr,low,pi-1)
quickSort(&arr,pi+1,high)
}
}
var arr = [11 , 40 ,50 ,20 ,30,77,90,77,14,8,897,765,34,0,89]
print(arr)
quickSort(&arr,0,arr.count-1)
print(arr)
내 생각에 때때로 a와 b는 같은 요소를 가리 킵니다. "스마트"알고리즘을 사용하는 것은 많은 프로그래머들의 함정이었습니다. 임시 변수 또는 심지어 빠른 네이티브 스왑 기능을 사용하는 것이 좋습니다. 매직 산술 스왑에는 많은 문제점이 있습니다. 부동 소수점 값에서 훨씬 더 위험합니다. – Sulthan
@ Sulthan 나는 그 무언가 무작위 원인 산출이 각 달리기에 동일하다는 것을 생각하지 않는다. 이 다소 루프 및 스왑 함수를 관련이 있다고 생각합니다. 아니? – va05