面试中可以用到的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));

这个方法的好处只有一个 

代码短 容易记 面试的时候能用就行


猜你喜欢

转载自blog.csdn.net/t1753867136/article/details/80277219