Ruby에서 정렬 (선택, 거품, 삽입, 빠른)을 시도했습니다.
정렬이란?
이번도 전회와 같이, 기본적인 이야기이므로 배열로 생각합니다. 배열 안에 있는 요소를 크기순으로 정렬할 수 없을까? ... 네, 거기 당신! 그럴 때는 정렬을 사용합시다! !
토마 뉘앙스는 이런 느낌이군요.
주의 : 배열의 머리 -> 요소 번호가 작은 쪽 · 배열의 엉덩이 -> 요소 번호가 큰 쪽으로하십시오.
선택 정렬(selective_sort)
이것을
要素の数-1
회 반복하면 할 수 있습니다. (왜 要素の数-1
시간인지 말하면 마지막 하나는 별도로 아무 것도하지 않고 정렬되어 있기 때문입니다)selective_sort.rb
def selective_sort(nums)
sorts = nums.clone
min_index = get_min_index(sorts, 0)
for i in 0...sorts.size-1
min_index = get_min_index(sorts, i)
sorts[i], sorts[min_index] = sorts[min_index], sorts[i]
end
return sorts
end
def get_min_index(nums, start)
return nil if start >= nums.size
min_index = start
for check in start...nums.size
min_index = check if nums[check] < nums[min_index]
end
return min_index
end
nums = 10.times.map{rand(100)}
sorted = selective_sort(nums)
p "nums: #{nums}" # "nums: [47, 63, 93, 58, 29, 27, 96, 36, 60, 62]"
p "sorted: #{sorted}" # "sorted: [27, 29, 36, 47, 58, 60, 62, 63, 93, 96]"
버블 정렬(bubble_sort)
bubble_sort.rb
def bubble_sort(nums)
sorts = nums.clone
for k in 0...sorts.size-1
# confirm minimum nums from sorts.start
(sorts.size-1).step(k+1, -1) do |i|
# comparing 2nums from sorts.last
sorts[i-1], sorts[i] = sorts[i], sorts[i-1] if sorts[i-1] > sorts[i]
end
end
return sorts
end
nums = 10.times.map{rand(100)}
sorted = bubble_sort(nums)
p "nums: #{nums}" # "nums: [23, 77, 31, 51, 20, 70, 6, 58, 12, 76]"
p "sorted: #{sorted}" # "sorted: [6, 12, 20, 23, 31, 51, 58, 70, 76, 77]"
삽입 정렬(insert_sort)
이 1 ~ 4를 배열의 요소가 모두 확정 될 때까지 반복합니다.
insert_sort.rb
def insert_sort(nums)
sorts = nums.clone
for i in 1...sorts.size
# confirm minimum nums from sorts.start+1
check = sorts[i].clone
k = i
while k>0 && sorts[k-1]>check
# shift sorts[k-1] to k if sorts[k-1] greater than check
sorts[k] = sorts[k-1]
k -= 1
end
sorts[k] = check
end
return sorts
end
nums = 10.times.map{rand(100)}
sorted = insert_sort(nums)
p "nums: #{nums}" # "nums: [73, 6, 76, 73, 44, 46, 47, 98, 69, 98]"
p "sorted: #{sorted}" # "sorted: [6, 44, 46, 47, 69, 73, 73, 76, 98, 98]"
빠른 정렬(quick_sort)
이것은 설명이 조금 그림이 없으면 어렵기 때문에 신경이 쓰이는 분은 넷으로 조사해 봐 주시는 것을 추천합니다.
이미지로서는
1. 배열의 머리의 요소를 기준으로 요소를 크고 작은 머리와 엉덩이로 나눕니다.
2. 전부를 나누면 기준의 요소를 크고 작은 경계의 요소로 바꾼다.
3. 기준의 요소였던 요소 이외의 배열(대략이 2개로 나누어진다)을 따로따로 1과 2를 반복한다.
이것을 반복해 나가면 소트 할 수 있습니다.
quick_sort.rbdef quick_sort(nums, left, right)
i = left + 1
k = right
while i<k
while nums[i]<nums[left] && i<right
i += 1
end
while nums[k]>=nums[left] && k>left
k -= 1
end
nums[i], nums[k] = nums[k], nums[i] if i<k
end
nums[left], nums[k] = nums[k], nums[left] if nums[left]>nums[k]
nums = quick_sort(nums, left, k-1) if left<k-1
nums = quick_sort(nums, k+1, right) if right>k+1
return nums
end
nums = 10.times.map{rand(100)}
sorted = quick_sort(nums.clone, 0, nums.size-1)
p "nums: #{nums}" # "nums: [79, 31, 56, 83, 80, 54, 54, 84, 65, 50]"
p "sorted: #{sorted}" # "sorted: [31, 50, 54, 54, 56, 65, 79, 80, 83, 84]"
요약
전회와 같은 정리가 되어 버립니다.
자세한 내용은이 책에 실려 있기 때문에 추천 해요! 언뜻 보면 초보자를위한 일러스트 풍부한 내용이없는 책처럼 보이지만 내용은 확고했습니다. 언어를 정해 코드를 쓰고 있는 것은 아니기 때문에 어느 언어를 사용하는 사람이라도 읽기 쉬운 한권이었습니다.
htps //w w. 아마존. 이. jp/dp/B01CZD 치네/레 f=dp-킨 dぇ-레아레 ct? _엔코엔 g=우 TF8&btkr=1
Reference
이 문제에 관하여(Ruby에서 정렬 (선택, 거품, 삽입, 빠른)을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/TurkeyLeg0403/items/3d6cf48a9e6c2265bfdc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def quick_sort(nums, left, right)
i = left + 1
k = right
while i<k
while nums[i]<nums[left] && i<right
i += 1
end
while nums[k]>=nums[left] && k>left
k -= 1
end
nums[i], nums[k] = nums[k], nums[i] if i<k
end
nums[left], nums[k] = nums[k], nums[left] if nums[left]>nums[k]
nums = quick_sort(nums, left, k-1) if left<k-1
nums = quick_sort(nums, k+1, right) if right>k+1
return nums
end
nums = 10.times.map{rand(100)}
sorted = quick_sort(nums.clone, 0, nums.size-1)
p "nums: #{nums}" # "nums: [79, 31, 56, 83, 80, 54, 54, 84, 65, 50]"
p "sorted: #{sorted}" # "sorted: [31, 50, 54, 54, 56, 65, 79, 80, 83, 84]"
전회와 같은 정리가 되어 버립니다.
자세한 내용은이 책에 실려 있기 때문에 추천 해요! 언뜻 보면 초보자를위한 일러스트 풍부한 내용이없는 책처럼 보이지만 내용은 확고했습니다. 언어를 정해 코드를 쓰고 있는 것은 아니기 때문에 어느 언어를 사용하는 사람이라도 읽기 쉬운 한권이었습니다.
htps //w w. 아마존. 이. jp/dp/B01CZD 치네/레 f=dp-킨 dぇ-레아레 ct? _엔코엔 g=우 TF8&btkr=1
Reference
이 문제에 관하여(Ruby에서 정렬 (선택, 거품, 삽입, 빠른)을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TurkeyLeg0403/items/3d6cf48a9e6c2265bfdc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)