js:数据结构笔记11--排序算法(1)

基本准备:

  function  CArray(numElems) {
  	this.dataStore = [];
  	this.pos = 0;
  	this.numElems = numElems;
  	this.insert = insert;
  	this.toString = toString;
  	this.clear = clear;
  	this.setData = setData;
  	this.swap =swap;
  	for(var i = 0; i < numElems; ++i) {
  		this.dataStore[i] = i;
  	}
  }
  function  setData() {
  	for(var i = 0; i < this.numElems; ++i) {
  		this.dataStore[i] = Math.floor(Math.random() * 100);//0-99
  	}
  }
  function clear() {
  	for (var i = 0; i <  this.numElems; ++i) {
  		this.dataStore[i] = 0;
  	}
  }
  function insert(elem) {
  	this.dataStore[this.pos++] = elem;
  }
  function toString() {
  	var str = "";
  	for(var i = 0; i < this.dataStore.length; ++i) {
  		str += this.dataStore[i] + " ";
  		if( i > 0 && (i+1) %10 === 0) {
  			str += "\n";
  		}
  	}
  	return str;
  }
  function swap(arr,index1,index2) {
  	var temp = arr[index1];
  	arr[index1] = arr[index2];
  	arr[index2] = temp;
  }

 基本排序算法:

  • 冒泡排序:最容易实现也是最慢的算法之一

    • 从头开始依次分别比较相邻的两个元素并排序,直到最后一个;此时确定最后一个会是最大的;
    • 重复上面步骤但不比较已经确定的,此时确定最后第二个是第二大的;
    • 继续重复直到剩下第一个元素为止,确定它是最小的;

效果:

  function bubbleSort() {
    var numElems = this.dataStore.length;
    var temp;
    for(var outer = numElems; outer > 1 ; --outer) {
      for(var inner = 0; inner < outer; ++inner) {
        if(this.dataStore[inner] > this.dataStore[inner + 1]) {
          swap(this.dataStore,inner,inner + 1);
        }
      }
    }
  }

demo:

  • 选择排序:
时间: 2024-12-16 03:44:40

js:数据结构笔记11--排序算法(1)的相关文章

js:数据结构笔记12--排序算法(2)

高级排序算法:(处理大数据:百万以上) 希尔排序:是插入排序的优化版: 首先设置间隔数组,然后按照每个间隔,分别进行排序: 如第一个间隔为5,首先a[5]与a[0]进行插入排序;然后a[6]和a[0],a[1]进行插入排序,直到最后一个: 然后换下一个间隔值,直到所有间隔值排序完(当间隔值为1时,就是一般的插入排序): 效果: 首先在类中添加间隔数组: this.gaps = [5,3,1]; 然后添加函数: function shellsort() { for(var g = 0; g < t

js:数据结构笔记13--检索算法

顺序查找:也称线性查找,暴力查找的一种 var nums = []; for(var i = 0; i < 10; ++i) { nums[i] = Math.floor(Math.random() * 101); } function seqSearch(arr,data) { for(var i = 0; i < arr.length; ++i) { if(arr[i] === data) { return i; } } return -1; } seqSearch(nums,45);

我的读书笔记(排序算法)

1.快速排序 假设待排序的序列为L[m...n],而一趟排序目的就是将其分割为两个子序列,分别为L[m...middle-1]和L[middle+1...n],其中L[m...middle-1]中的每个元素都小于L[middle],而L[middle+1...n]中的每个元素都大于L[middle] 递归调用快速排序算法,对L[m...middle-1]和L[middle+1..n]分别进行排序 由于是原地排序,所以递归结束后就自然形成了有序序列 1 /// <summary> 2 /// 快

数据结构之高级排序算法

一.希尔排序 希尔排序(缩小增量法) 属于插入类排序,由Shell提出,希尔排序对直接插入排序进行了简单的改进:它通过加大插入排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而使数据项大跨度地移动,当这些数据项排过一趟序之后,希尔排序算法减小数据项的间隔再进行排序,依次进行下去,进行这些排序时的数据项之间的间隔被称为增量,习惯上用字母h来表示这个增量. 具体代码实现: 1 package data.struct.algorithm; 2 3 //高级排序算法之希尔排序 4 class

【数据结构】常用排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)

直接插入排序: 在序列中,假设升序排序 1)从0处开始. 1)若走到begin =3处,将begin处元素保存给tmp,比较tmp处的元素与begin--处元素大小关系,若begin处<begin-1处,将begin-1处元素移动到begin:若大于,则不变化.再用tmp去和begin--处的元素用同样的方法去作比较,直至begin此时减少到数组起始坐标0之前结束. 3)以此类推,依次走完序列. 时间复杂度:O() 代码如下: //Sequence in ascending order  voi

【数据结构】选择排序算法示例

基本选择排序编辑 排序算法即解决以下问题的算法: 输入 n个数的序列<a1,a2,a3,...,an>. 输出 原序列的一个重排<a1*,a2*,a3*,...,an*>:,使得a1*<=a2*<=a3*<=...<=an* 排序算法有很多,包括插入排序,冒泡排序,堆排序,归并排序,选择排序,计数排序,基数排序,桶排序,快速排序等.插入排序,堆排序,选择排序,归并排序和快速排序,冒泡排序都是比较排序,它们通过对数组中的元素进行比较来实现排序,其他排序算法则是

(2)Java数据结构--二叉树 -和排序算法实现

=== 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDecimal类Java API —— BigInteger类Java API —— Calendar类Java API —— DateFormat类Java API —— Date类Java API —— HashMap类 & LinkedHashMap类Java API —— JDK5新特性Java

数据结构(四)常用排序算法-选择、插入、希尔

选择排序 实现思路: 1.将需排序的集合设为A,已经排好顺的集合为B(在未排序前B集合为空). 2.每次从A集合中查找出最大或者最小的元素后放入集合B中 3.同时将该元素从集合A中移除. 4.循环执行以上两步直到集合A为空,B集合中的元素就有序了. 缺点: 效率低,时间复杂度为 O(n*n),是一种只适合小数据集的原地排序算法.   示范代码 1  public class CommSort { 2      // 比较大小 3      @SuppressWarnings({ "rawtype

算法和数据结构~各位排序算法的介绍与实现(C#)

排序是指将元素集合按照规定的顺序排列.通常有两种排序方法,升序排列和降序排列.例如,对整数集{5,2,7,1}进行升序排列,结果为{1,2,5,7},对其进行降序排列结果为{7,5,2,1}.总的来说,排序的目的是使数据能够以更有意义的形式表现出来.虽然排序最显著的应用是排列数据以显示它,但它往往可以用来解决其他的问题,特别是作为某些已成型算法的一部分.      总的来说,排序算法分为两大类:比较排序和线性时间排序.比较排序依赖于比较和交换来将元素移动到正确的位置上.令人惊讶的是,并不是所有的