zoukankan      html  css  js  c++  java
  • 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 += "
    ";
      		}
      	}
      	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:

    • 选择排序:也是简单的算法之一
      • 从未排序的数列开头开始向后一个个比较,找到一个比它小的值,交互位置;
      • 用刚交互的值从它被替换的位置开始继续向后比较,重复直到比较到最后一个值,此时最前面的值为这次排序找出的最小值,确定它排序;
      • 继续从剩下的未确定排序的数列从头开始重复,找到最小值放到前面第二个个位置,重复;
      • 继续,直到只剩最后一个数值;
      • 效果:

      function selectionSort() {
        var min,temp;
        for(var outer = 0; outer < this.dataStore.length-1; ++outer) {  //不和自己比较减一
          min = outer;
          for(var inner = outer+1; inner < this.dataStore.length; ++inner) { //和已确定排序的个数叫要比较的一个比较
            if(this.dataStore[inner] < this.dataStore[min]) {
              swap(this.dataStore,inner,min);
            }
          }
        }
      }

     demo:

    •  插入排序:也是简单的算法之一,特别是在对已经排好序的数据操作时效率高;
      • 开头的第一个元素为确定排序,从第二个元素开始,在确定的排序数列中从后往前比较;
      • 如果大于被比较的数值,则插入其后面,反之则继续往前比较;
      • 当第二个元素插入到适当位置后,第三个元素继续重复;
      • 继续,直到最后一个元素;
      • 效果:

     

     function insertionSort() {
        var temp,inner;
        for(var outer = 1; outer < this.dataStore.length; ++outer) {
          temp = this.dataStore[outer];
          inner = outer;
          while(inner > 0 && (this.dataStore[inner - 1] > temp)) {
            this.dataStore[inner] = this.dataStore[inner - 1]; //这里不是单纯的交互,不用swap
            --inner;
          }
          this.dataStore[inner] = temp;
        }
      }
    

    demo:

     一般来讲三种算法速度:插入>选择>冒泡;

  • 相关阅读:
    python循环删除list中的元素
    Mysql主从同步原理简介
    python 3新式类的多继承
    面向对象之多态、多态性
    python的collections模块和functools模块
    Python(os和sys)使用
    javascript中的数据类型
    语法、关键保留字及变量
    使用JavaScript
    javascript的概述
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4035146.html
Copyright © 2011-2022 走看看