關于降序代碼問題?
def?reversed_cmp(x,?y): ????if?x?>?y: ????????return?-1 ????if?x?<?y: ????????return?1 ????return?0
課程里面說如果x 排在y前面,就返回-1;如果x排在y后面,就返回1;如果x==y,就返回0。這樣就能實現降序。但是為什么這樣就可以實現降序排序呢?x排在y前面,為什么不能返回1呢?很疑惑。。。
def?reversed_cmp(x,?y): ????if?x?>?y: ????????return?-1 ????if?x?<?y: ????????return?1 ????return?0
課程里面說如果x 排在y前面,就返回-1;如果x排在y后面,就返回1;如果x==y,就返回0。這樣就能實現降序。但是為什么這樣就可以實現降序排序呢?x排在y前面,為什么不能返回1呢?很疑惑。。。
2019-01-23
舉報
2019-01-23
我覺得你理解錯了,你應該要明白實現降序或者升序的函數是sorted函數,而不是你自定義的revered_cmp().
而sorted函數的作用是接受一個比較函數對序列進行排列,而這個比較函數會根據返回值是-1,就會把 x 排在 y 前面,返回值是1,就會把 x 排在 y 后面,返回值為0,就把兩者并排。
所以你定義的reversed_cmp(),是作為sorted()的一個參數實現降序功能,因為sorted()默認的參數為cmp,只能進行升序排列,當然題目只是為了鍛煉我們自定義排序函數,實際上sorted()還有一個參數reverse,表示排序規則,reverse = True 降序 , reverse = False 升序(默認),可以方便的實現降序排列。
你可以看看http://www.runoob.com/python/python-func-sorted.html,加深理解。
2019-02-26
可以進一步理解為兩個參數作差,前面的減去后面的,如果是正數,說明前面的大,就返回1,就不改變順序(前面的依然在前面,后面的依然在后面),反之,就改變以下順序。如果等于0,就無所謂。
現在經過對第一個和第二個數字進行比較,把實數集分成5部分。比小的還小,等于小的,介于大小之間,等于大的,比大的還大。
接下來再拿第三個數來跟前兩個數字來比,比較后放到正確的位置,然后再拿第四個數來跟前三個數來比較,放到正確的位置,依次類推……
以上全是我個人的理解和猜測,我覺得比較容易理解,如果有懂底層原理的大神,歡迎來指正。