JavaScript算法测试函数

  • SetData()函数生成了存储在数组中的随机数字。Math类的random()函数会生成[0,1)区间内的随机数字。换句话说,random()函数生成的随机数字大于等于0,但不会等于1。最后在用Math类的floor()函数确定最终结果。
  • 如下这个公式可以成功生成1~100的随机数字集合。
  1. function CArray(numElements) {
  2. this.dataStore = [];
  3. this.pos = 0;
  4. this.numElements = numElements;
  5. this.insert = insert;
  6. this.toString = toString;
  7. this.clear = clear;
  8. this.setData = setData;
  9. this.swap = swap;
  10. for (var i = 0; i < numElements; ++i) {
  11. this.dataStore[i] = i;
  12. }
  13. }
  14. //数据输出
  15. function setData() {
  16. for (var i = 0; i
  17. <
  18. this.numElements; ++i) {
  19. this.dataStore[i] = Math.floor(Math.random() * (this.numElements + 1));//生成随机数组
  20. }
  21. }
  22. function clear() {
  23. for (var i = 0; i
  24. <
  25. this.dataStore.length; ++i) {
  26. this.dataStore[i] = 0;
  27. }
  28. }
  29. function insert(element) {
  30. this.dataStore[this.pos++] = element;
  31. }
  32. function toString() {
  33. var restr = "";
  34. for (var i = 0; i < this.dataStore.length; ++i) {
  35. restr += this.dataStore[i] + " ";
  36. if (i > 0 & i % 10 == 0) {
  37. restr += "\n";
  38. }
  39. }
  40. return restr;
  41. }
  42. function swap(arr,index1,index2) {
  43. var temp = arr[index1];
  44. arr[index1] = arr[index2];
  45. arr[index2] = temp;
  46. }
  47. //测试
  48. var numElements = 100;
  49. var myNums = new CArray(numElements);
  50. myNums.setData();
  51. console.log(myNums.toString());

名词解释:

  • n: 数据规模
  • k:“桶”的个数
  • In-place: 占用常数内存,不占用额外内存
  • Out-place: 占用额外内存
  • 稳定性:排序后2个相等键值的顺序和排序之前它们的顺序相同
用一个for遍历数组排序
  1. var a = [12,13,65,54,86,21,37,1,95,4];
  2. var l = a.length;
  3. console.log(a);
  4. for (var i = 0; i < l; i++) {
  5. if (a[i] > a[i + 1]) {
  6. var temp = a[i];
  7. a[i] = a[i + 1];
  8. a[i + 1] = temp;
  9. }
  10. if (i == l-1) {
  11. i = -1;
  12. l--;
  13. }
  14. }
  15. console.log(a);