面試常常遇到這個問題,因此整理下,以便理解。面試
常常用到的排序方法有兩種,冒泡排序和快速排序。數組
1.先說快速排序ui
原理:每一次比較相鄰兩個數的大小,經過第一輪循環排序,找到最大值放到後面,第二輪找到二大值放後面。this
代碼實現:spa
sort(arr: Array<any>) { for(let i = 0; i<arr.length;i++) { for(let j = 0;j<arr.length-i-1;j++){ let tmp = arr[j]; if(arr[j] > arr[j+1]){ arr[j] = arr[j+1]; arr[j+1] = tmp; } } } return arr; }
好比說執行[19,49,89,5,8,34,1,5,63]這個數組,通過第一輪循環會把89取出來放在最後面,而後再對前面的數據進行第二輪循環,會拿到63,依次類推。code
注:若是須要把數組遞減排序,把上面代碼中的arr[j]>arr[j+1]改成小於符號便可。blog
2.冒泡排序排序
原理:取一箇中間值,經過這個之間值和數組中的樹相比,比它小的放左邊,比它大的放右邊,再依次遞歸左側和右側的數組,以此達到排序目的。遞歸
代碼實現:class
quickSort(arr:Array<any>):Array<any> { if( arr.length < 1) { return arr; } let num = Math.floor(arr.length/2); let middle = arr.splice(num,1)[0]; let leftArr = []; let rightArr = []; for(let i = 0;i < arr.length; i++) { if (middle > arr[i]) { leftArr.push(arr[i]); } else { rightArr.push(arr[i]); } } return this.quickSort(leftArr).concat([middle],this.quickSort(rightArr)); }
同理,若是要獲得一個遞減的數組 把middel>arr[i]中的大於改成小於便可。