[Ruby Program] ถ้าต้องการให้ข้อมูลที่ random เก็บไว้ใน array arr นั้นถูก sort ตามฟังก์ชันที่เขียนไว้จะต้องทำยังไงเหรอค่ะ
เนื่องจากโปรแกรมที่ให้ดูมันไม่ sort แต่จะแสดงค่าที่ random ให้เพียงเท่านั้นค่ะ ขอบคุณสำหรับผู้ที่ช่วยตอบคำถามนี้ล่วงหน้านะค่ะ
def sort(array)
def min(array, from)
min_val = array[from..-1].min
min_idx = array[from..-1].index(min_val) + from
return min_idx
end
array.each_with_index { |v, i|
min_idx = min(array, i)
tmp = array[i]
array[i] = array[min_idx]
array[min_idx] = tmp
}
array
end
def random_number
arr=[]
arr<< rand
end>
100.times { puts random_number }
#p sort(arr)
กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น
ลองดูแบบนี้มั้ย?
(1..10).collect {|i| i*rand }.sort!การบ้านเขียน sort มั๊ง ถ้าส่งแบบนี้อาจารย์จะว่าไงเนี่ย
อ๋ออออ......
ข้าน้อยผิดเอง 55+
งั้นเปลี่ยนเป็น ลอง bubble แบบนี้มั้ย
เอามั่ง
เจ้า @a หมายถึงอะไรอะครับ
ช่วง swap สามารถเขียนแบบนี้ได้ (ทำนองเดียวกับ python)
ประโยคประกาศตัวแปร i กับ increment i มันเกินมานะ
เนื่องจากเราใช้ each กับ Range อยู่แล้ว
น่าจะเขียนแบบนี้ไปเลย
ผมมั่วเอง - -'
งั้นลอก Python ข้างบนละกัน.. ดูดี
ขำ ๆ สุ่มไป เรียงไป
? sort ตอนไหน
ตอน randint() ใส่ขอบเขตแบบที่สุ่มออกมายังไงก็เรียงตั้งแต่ต้น (รึเปล่า)
ถ... ถูกต้องนะคร้าบบบ
random.randint(a[i-1],a[i-1]+20)
ค่าต่ำสุดของการสุ่มคือค่าก่อนหน้า a[i-1] ค่าสูงสุดคือ a[i-1]+20 ครับ
เข้าใจแล้ว
ผมลองสั่ง run โดยใช้ dimension น้อยไป (ลองที่ 10) มันก็เลยมีโอกาสได้ผลลัพท์ที่ไม่เรียง
โปรแกรมผิดเองครับ เพราะผมเขียนแบบนี้ก่อน
แล้วไปเปลี่ยนรูปแบบ for ทีหลัง แล้วดันใส่ dimension เสียเยอะ เลยตรวจสอบไม่ดี
a = [float(random.randint(a[i-1],a[i-1]+20)) for i in range(1,dim+1)]
มันยังเอาค่าของ a มาจาก range อยู่ มันเลยมีข้อผิดพลาดครับ เพราะมันไม่ recursive ต้องเปลี่ยนตรง range เป็น
a = range(1,dim*21,21)
ถึงจะใช้ได้
แก้ตัวโค้ดแรกครับ
เพราะว่า ตอน sort กับ ตอน generate เลข random
arr มันเป็นคนละตัวกัน
arr ของหนู ประกาศไว้ใน scope ของ function มันจึงเรียกใช้งานได้จากใน function เท่านั้น
พอตอนสั่ง p sort(arr) มันก็เลยเกิด error undefined local variable or method `arr'
ขอบคุณมากๆนะค่ะ สำหรับทุกๆความคิดเห็น ตอนนี้ทำได้แล้วค่ะ