自定義實現陣列排序,萬能排序函式

2021-10-07 14:10:15 字數 2373 閱讀 5403

arr.sort() 排序,排序分為預設排序和自定義排序;

預設排序,該方法會呼叫每個陣列項的tostring()方法,然後按照字串行排序 ;

自定義排序,該排序應該考慮分很多種,有純數字排序,純單個字母排序,多字母單詞排序,按要求對陣列內的物件進行排序等等。

排序除了陣列項的要求以外還存在公升序/降序的要求。

var arr =[3

,4,1

,2,11

,112,89

];// var arr = ['tom','terry','fairy','ronda'];

console.

log(

'原陣列:'

, arr)

;// [3, 4, 1, 2, 11, 112, 89]

// console.log(arr.sort()) // [1, 11, 112, 2, 3, 4, 89] --> 由此可以看出,其實這個預設排序的結果一般都不會是我們想要的結果

// console.log(arr) // [1, 11, 112, 2, 3, 4, 89]

// 更多時候,我們是希望得到從大到小或者從小到大的排序結果

// 因此,我們自己定義乙個比較函式

function

compare

(a,b)

console.

log(arr.

sort

(compare)

)// [1, 2, 3, 4, 11, 89, 112]

console.

log(arr)

// [1, 2, 3, 4, 11, 89, 112]

前面的比較函式適合於大多數的資料型別;

當然,我們需要考慮的更為全面些才行,比如陣列中存放物件時,當需要按照某乙個屬性排序,更或者,被進一步指定公升序或者降序,那麼前面的比較函式是絕對做不到的;

接下來重新定義乙個比較函式,讓此函式能萬能的解決所要求的多元的排序,能夠按照不同的屬性(比較數值)公升序或者降序。

var arr =[3

,4,1

,2,11

,112,89

];var arr2 =

['test'

,'hello'

,'a'

,'come'];

var arr3 =[,

,,];

function

evecompare

(order, attr)

return1;

}else

return1;

}}else

return1;

}else

return1;

}}}else}}

// 測試檢驗

// desc降序 asc公升序

console.

log(

'原陣列:'

,arr)

console.

log(arr.

sort

(evecompare

('desc'))

)console.

log(arr.

sort

(evecompare

('asc'))

)console.

log(

'原陣列:'

,arr2)

console.

log(arr2.

sort

(evecompare

('asc'))

)console.

log(arr2.

sort

(evecompare

('desc'))

)// console.log('原陣列:',arr3)

// 對組數按照物件的屬性進行排序

/* console.log(arr3.sort(evecompare('asc','name')))

console.log(arr3.sort(evecompare('desc','name')))

console.log(arr3.sort(evecompare('asc','age')))

console.log(arr3.sort(evecompare('desc','age')))

console.log(arr3.sort(evecompare('asc','score')))

console.log(arr3.sort(evecompare('desc','score'))) */

上面函式的**我們可以用三目元算符給簡化,得到如下:

// 最終**簡化

/* return function (a, b) */

萬能排序 快速排序

int campare const void a,const void b void swap char a,char b,int size void quicksort void k,int start num,int end num,int size,int campar const void ...

自定義排序函式

python 內建的sorted 函式可對 list 進行排序 sorted 36,5,12,9,21 5,9,12,21,36 但 sorted 也是乙個高階函式,它可以接收乙個比較函式來實現自定義排序,比較函式的定義是,傳入兩個待比較的元素 x,y 如果x 應該排在 y 的前面,返回 1,如果 ...

自定義排序函式

python內建的sorted 函式可對list進行排序 sorted 36,5,12,9,21 5,9,12,21,36 但sorted 也是乙個高階函式,它可以接收乙個比較函式來實現自定義排序,比較函式的定義是,傳入兩個待比較的元素 x,y,如果 x 應該排在 y 的前面,返回 1,如果 x 應...