1. 程式人生 > >面試中可以用到的2種陣列排序方法

面試中可以用到的2種陣列排序方法

做面試題時 常常會考陣列排序的問題

我個人認為並沒有必要掌握全部的方法 掌握2種常用的即可

		var arr = [1,2,3,4,5,1,2,3,4,5,'1','1',2,'2','2'];
		var quickSort = function(arr){
			if(arr.length <=1 ){return arr;}
			  var pivotIndex = Math.floor(arr.length / 2) ;

			  var pivot = arr.splice(pivotIndex, 1)[0];

			  var left = [];

			  var right = [];

			  for (var i = 0; i < arr.length; i++){

			    if (arr[i] < pivot) {

			      left.push(arr[i]);

			    } else {

			      right.push(arr[i]);

			    }

			  }
			return quickSort(left).concat([pivot], quickSort(right));			
		}
		console.log(quickSort(arr));

1.快速排序 這個用到了遞迴 這是一個加分項

2.

		var arr = [2,5,88,444,751,24,156,54,99,5]



		var systemSort=function(array){ 
			
			return array.sort(function(a, b){ 
				return a - b; 
			}); 
		}
		console.log(systemSort(arr));     
關於return a - b的解釋
<script type="text/javascript">
var fruit = ['cherries', 'apples', 'bananas'];
fruit.sort(); 
// ['apples', 'bananas', 'cherries']


var scores = [1, 10, 21, 2]; 
scores.sort(); 
// [1, 10, 2, 21]
// 注意10在2之前,
// 因為在 Unicode 指標順序中"10"在"2"之前


var things = ['word', 'Word', '1 Word', '2 Words'];
things.sort(); 
// ['1 Word', '2 Words', 'Word', 'word']
// 在Unicode中, 數字在大寫字母之前,
// 大寫字母在小寫字母之前.
// 如果沒有指明 compareFunction ,那麼元素會按照轉換為的字串的諸個字元的Unicode位點進行排序。例如 "Banana" 會被排列到 "cherry" 之前。當數字按由小到大排序時,9 出現在 80 之前,但因為(沒有指明 compareFunction),比較的數字會先被轉換為字串,所以在Unicode順序上 "80" 要比 "9" 要靠前。


// 如果指明瞭 compareFunction ,那麼陣列會按照呼叫該函式的返回值排序。即 a 和 b 是兩個將要被比較的元素:


// 如果 compareFunction(a, b) 小於 0 ,那麼 a 會被排列到 b 之前;
// 如果 compareFunction(a, b) 等於 0 , a 和 b 的相對位置不變。備註: ECMAScript 標準並不保證這一行為,而且也不是所有瀏覽器都會遵守(例如 Mozilla 在 2003 年之前的版本);
// 如果 compareFunction(a, b) 大於 0 , b 會被排列到 a 之前。
// compareFunction(a, b) 必須總是對相同的輸入返回相同的比較結果,否則排序的結果將是不確定的。
// 所以,比較函式格式如下:
  function compare(a, b) {
  if (a < b ) {           // 按某種排序標準進行比較, a 小於 b
    return -1;
  }
  if (a > b ) {
    return 1;
  }
  // a must be equal to b
  return 0;
}
// 要比較數字而非字串,比較函式可以簡單的以 a 減 b,如下的函式將會將陣列升序排列
function compareNumbers(a, b) {
  return a - b;
}
// sort 方法可以使用 函式表示式 方便地書寫:
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers);


// 也可以寫成:ES6形式
var numbers = [4, 2, 5, 1, 3]; 
numbers.sort((a, b) => a - b); 
console.log(numbers);


// [1, 2, 3, 4, 5]




var stringArray = ["Blue", "Humpback", "Beluga"];
var numericStringArray = ["80", "9", "700"];
var numberArray = [40, 1, 5, 200];
var mixedNumericArray = ["80", "9", "700", 40, 1, 5, 200];


function compareNumbers(a, b)
{
  return a - b;
}


console.log('stringArray:' + stringArray.join());
console.log('Sorted:' + stringArray.sort());


console.log('numberArray:' + numberArray.join());
console.log('Sorted without a compare function:'+ numberArray.sort());
console.log('Sorted with compareNumbers:'+ numberArray.sort(compareNumbers));


console.log('numericStringArray:'+ numericStringArray.join());
console.log('Sorted without a compare function:'+ numericStringArray.sort());
console.log('Sorted with compareNumbers:'+ numericStringArray.sort(compareNumbers));


console.log('mixedNumericArray:'+ mixedNumericArray.join());
console.log('Sorted without a compare function:'+ mixedNumericArray.sort());
console.log('Sorted with compareNumbers:'+ mixedNumericArray.sort(compareNumbers));

這個方法的好處只有一個 

程式碼短 容易記 面試的時候能用就行

相關推薦

面試中可以用到的2陣列排序方法

做面試題時 常常會考陣列排序的問題我個人認為並沒有必要掌握全部的方法 掌握2種常用的即可 var arr = [1,2,3,4,5,1,2,3,4,5,'1','1',2,'2','2']; var quickSort = function(arr){ if(ar

常見的幾陣列排序方法

---恢復內容開始--- 一、研究陣列排序的意義: 資料結構中,排序演算法各有用處,不同的排序方法有不同的時間複雜度與空間複雜度。為了能夠依據不同情況,選用不同的排序方法解決不同的問題。 二、常見的陣列排序方法: 以下研究,預設是對運算元組進行從小到大的排序。使用語言是Java。 1.選擇排序法

JAVA陣列中五常見排序方法

前言: 幾種常用的JAVA陣列排序方法的整合。 法一:Arrays.sort() Arrays.sort()排序方法在java中是最簡單且最常用的排序方法 int []arr1= {45,34,59,55}; Arrays.sort(arr1);//呼叫方法排序即可

IOS幾簡單有效的陣列排序方法

//第一種,利用陣列的sortedArrayUsingComparator呼叫 NSComparator ,obj1和obj2指的陣列中的物件 NSComparator cmptr = ^(id obj1, id obj2){  if ([obj1 integerValue] > [obj2 in

數組的三隨機排序方法

可能 循環 長度 定義 利用 效率 圖片 取整 技術分享 第一種、利用數組自帶的sort方法(下面是完整代碼)   這種方法是利用隨機出一個正數或者負數來讓數組裏面的內容兩兩對比,是正數就是順序,是負數則是倒序,這種方法的缺點就是隨機性不高,不能完全隨機,因為是兩兩對比

常見排序方法

冒泡 function bubble($data){ $size = count($data); for($i=0;$i<$size;$i++){ for($j=$i+1;$j<$size;$j++){ if($data

陣列排序方法sort()

在預設情況下,sort()方法按升序排序陣列項------即最小的值位於最前面,最大的值排在最後面。為了實現排序,sort()方法會呼叫toString()轉型方法,然後比較得到的字串。也就是說,即使陣列中的每一項都是數值,sort()方法比較的也是字串。 va

C#中常見的幾陣列排序例項

1、氣泡排序冒泡是最常用的排序方法之一,它在第一次排序的時候將每一條記錄的關鍵字進行比較,直到n-1個記錄和n個記錄的關鍵字比較完成為止,再進行下一次排序,直到n-1趟記錄為止 class BubbleSorter /// <summary

Java實現幾常見排序方法

package test.sort;   import java.util.Random;   //Java實現的排序類  publicclass NumberSort {        //私有構造方法,禁止例項化  private NumberSort() {            super();   

PHP的四基本排序方法

轉載來源:http://www.php100.com/html/php/rumen/2013/1029/6333.html 許多人都說 演算法是程式的核心,一個程式的好於差,關鍵是這個程式演算法的優劣。作為一個初級phper,雖然很少接觸到演算法方面的東西 。但是對於氣泡排

Java實現幾常見排序方法(下) .

 插入排序的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。其具體步驟參見程式碼及註釋。 [java] view plaincopyprint? /**  * 插入排序<br/>  * <ul> 

linux下安裝2GCC的方法

轉載自春夏秋冬的部落格。 現在很多程式設計師都應用GCC,怎樣才能更好的應用GCC。目前,GCC可以用來編譯C/C++、FORTRAN、JAVA、OBJC、ADA等語言的程式,可根據需要選擇安裝支援的語言。本文以在Redhat Linux安裝GCC4.1.2為例(因在專案開發過程中要求使用,沒有用最新的G

python幾經典排序方法的實現

程式碼已封裝為SortMethod的class #*-* coding:utf-8 *-* ''' Author:7a6d4 calss for sorting ''' class SortMethod: ''' 插入排序的基本操作就是將一個

java 實現幾常見排序方法

日常操作中常見的排序方法有:氣泡排序、快速排序、選擇排序、插入排序、希爾排序,甚至還有基數排序、雞尾酒排序、桶排序、鴿巢排序、歸併排序等。 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列

陣列排序方法及C實現的總結

1、問題描述     陣列排序(即按某種特定的順序排列資料,如升序或降序)是最重要的計算應用之一,銀行用帳號對所有的支票進行能夠排序,並根據排序結果準備月底的財務報告,學校學生成績管理系統用陣列排序的方法將考試成績從高到低進行排名,陣列排序方法很多,有直接插入排序、氣泡排序

常見排序方法

一、選擇排序法 1.1 可看可不看 在瞭解這三種排序演算法前,先解釋一個概念:牆(wall)。 在這三中排序演算法中,為了區分已排序序列與未排序序列,於是我們設定一堵牆把它們區分開來。 這堵牆的具體表現形式為它限制了排序的可操作範圍,在程式中表現為在迴圈中變數的取值

集合類的2遍歷方法加上如何遍歷自定義物件

import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; class Cat{ String name; int age; C

Java不規則二維陣列的雙維度排序2方法

在Java中Arrays.sort()函式是不能對二維陣列進行排序的。 那麼,我們應該怎麼對Java中的二維陣列進行排序呢?之前在《Java不規則二維陣列的雙維度排序》一文中已經講過一種方法了,現在讓

2.Java陣列_一維陣列二維陣列的動態初始化與靜態初始化、方法接收/返回/修改陣列、java對陣列排序/全拷貝/部分拷貝

Java陣列----引用資料型別,必須在使用前先初始化;否則會nullPointerException(執行時異常)。 (引用傳遞:多個棧記憶體指向同一塊堆記憶體) 1.一維陣列初始化 (1)動態初始化(宣告並開闢陣列) 資料型別[] 陣列名稱 = new 資料型別[長度]; 如

面試常考演算法題(一)--四排序方法以及小和問題

常用演算法題練習(一) 引言 演算法的重要毋庸置疑,在面試過程中或多或少的會被問到演算法,這一個系列的文章雖然冠以常用這一稱呼,但是並不意味著所有演算法都很簡單,這一篇文章是系列文章的第一篇,包括以下幾個演算法題,部分相對而言有點難度的題目會有所講解. 氣泡