当前位置: 首页 > news >正文

苏州快速建设网站公司儿童个人网站源码

苏州快速建设网站公司,儿童个人网站源码,网站友情链接建设,建设网站收费明细1、希尔排序 希尔排序#xff0c;也称递减增量排序算法#xff0c;是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的#xff1a; 插入排序在对几乎已经排好序的数据操作时#xff0c;效率高…1、希尔排序 希尔排序也称递减增量排序算法是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的 插入排序在对几乎已经排好序的数据操作时效率高即可以达到线性排序的效率但插入排序一般来说是低效的因为插入排序每次只能将数据移动一位 希尔排序的基本思想是先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序待整个序列中的记录基本有序时再对全体记录进行依次直接插入排序。 1. 算法步骤 选择一个增量序列 t1t2……tk其中 ti tj, tk 1 按增量序列个数 k对序列进行 k 趟排序 每趟排序根据对应的增量 ti将待排序列分割成若干长度为 m 的子序列分别对各子表进行直接插入排序。仅增量因子为 1 时整个序列作为一个表来处理表长度即为整个序列的长度。 2. 示意图 代码实现 JavaScript 实例 function shellSort(arr) {     var len  arr.length,temp,gap  1;    while(gap  len/3) {         *//动态定义间隔序列*        gap gap*31;     }     for (gap; gap  0; gap  Math.floor(gap/3)) {         for (var i  gap; i  len; i) {           temp  arr[i];            for (var j  i-gap; j  0  arr[j]  temp; j-gap) {                arr[jgap]  arr[j];            }            arr[jgap]  temp;        }    }    return arr;}Python 实例 def shellSort(arr):     import math    gap1     while(gap  len(arr)/3):        gap  gap*31     while gap  0:         for i in range(gap,len(arr)):            temp  arr[i]            j  i-gap             while j 0 and arr[j]  temp:                arr[jgap]arr[j]                j-gap            arr[jgap]  temp        gap  math.floor(gap/3)     return arrGo 实例 func shellSort(arr []int) []int {        length : len(arr)        gap : 1         for gap length/3 {                gap  gap*3  1         }         for gap  0 {                 for i : gap; i  length; i {                        temp : arr[i]                        j : i - gap                         for j  0  arr[j]  temp {                                arr[jgap]  arr[j]                                j - gap                         }                        arr[jgap]  temp                 }               gap  gap / 3        }        return arr}Java 实例 public static void shellSort(int[] arr) {int length  arr.length;int temp;for (int step  length / 2; step  1; step / 2) {for (int i  step; i  length; i) {temp  arr[i];int j  i - step;while (j  0  arr[j]  temp) {arr[j  step]  arr[j];j - step;}arr[j  step]  temp;}} }PHP 实例 function shellSort($arr){$len  count($arr);$temp  0;$gap  1;while($gap  $len / 3) {$gap  $gap * 3  1;}for ($gap; $gap  0; $gap  floor($gap / 3)) {for ($i  $gap; $i  $len; $i) {$temp  $arr[$i];for ($j  $i - $gap; $j  0  $arr[$j]  $temp; $j - $gap) {$arr[$j$gap]  $arr[$j];}$arr[$j$gap]  $temp;}}return $arr; }C 实例 void shell_sort(int arr[], int len) {int gap, i, j;int temp;for (gap len 1; gap 0; gap 1)for (i gap; i len; i) {temp arr[i];for (j i - gap; j 0 arr[j] temp; j - gap)arr[j gap] arr[j];arr[j gap] temp;} }C 实例 templatetypename T void shell_sort(T array[], int length) {int h 1;while (h length / 3) {h 3 * h 1;}while (h 1) {for (int i h; i length; i) {for (int j i; j h array[j] array[j - h]; j - h) {std::swap(array[j], array[j - h]);}}h h / 3;} }2、归并排序  归并排序Merge sort是建立在归并操作上的一种有效的排序算法。该算法是采用分治法Divide and Conquer的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用归并排序的实现由两种方法 自上而下的递归所有递归的方法都可以用迭代重写所以就有了第 2 种方法自下而上的迭代 在《数据结构与算法 JavaScript 描述》中作者给出了自下而上的迭代方法。但是对于递归法作者却认为 However, it is not possible to do so in JavaScript, as the recursion goes too deep for the language to handle. 然而在 JavaScript 中这种方式不太可行因为这个算法的递归深度对它来讲太深了。 说实话我不太理解这句话。意思是 JavaScript 编译器内存太小递归太深容易造成内存溢出吗还望有大神能够指教。 和选择排序一样归并排序的性能不受输入数据的影响但表现比选择排序好的多因为始终都是 O(nlogn) 的时间复杂度。代价是需要额外的内存空间。 2. 算法步骤 申请空间使其大小为两个已经排序序列之和该空间用来存放合并后的序列设定两个指针最初位置分别为两个已经排序序列的起始位置比较两个指针所指向的元素选择相对小的元素放入到合并空间并移动指针到下一位置重复步骤 3 直到某一指针达到序列尾将另一序列剩下的所有元素直接复制到合并序列尾。 3. 示意图 代码实现 JavaScript 实例 function mergeSort(arr) {// 采用自上而下的递归方法var len  arr.length;if(len  2) {return arr;}var middle  Math.floor(len / 2),left  arr.slice(0, middle),right  arr.slice(middle);return merge(mergeSort(left), mergeSort(right));}function merge(left, right){var result  [];while (left.length  right.length) {if (left[0]  right[0]) {result.push(left.shift());} else {result.push(right.shift());}}while (left.length)result.push(left.shift());while (right.length)result.push(right.shift());return result; }Python 实例 def mergeSort(arr):import mathif(len(arr)2):return arrmiddle  math.floor(len(arr)/2)left, right  arr[0:middle], arr[middle:]return merge(mergeSort(left), mergeSort(right))def merge(left,right):result  []while left and right:if left[0]  right[0]:result.append(left.pop(0))else:result.append(right.pop(0));while left:result.append(left.pop(0))while right:result.append(right.pop(0));return resultGo 实例 func mergeSort(arr []int) []int {length : len(arr)if length  2 {return arr}middle : length / 2left : arr[0:middle]right : arr[middle:]return merge(mergeSort(left), mergeSort(right))}func merge(left []int, right []int) []int {var result []intfor len(left) ! 0  len(right) ! 0 {if left[0]  right[0] {result  append(result, left[0])left  left[1:]} else {                        result  append(result, right[0])right  right[1:]}}for len(left) ! 0 {result  append(result, left[0])left  left[1:]}for len(right) ! 0 {result  append(result, right[0])right  right[1:]}return result }Java 实例 public class MergeSort implements IArraySort {Overridepublic int[] sort(int[] sourceArray) throws Exception {// 对 arr 进行拷贝不改变参数内容int[] arr  Arrays.copyOf(sourceArray, sourceArray.length);if (arr.length  2) {return arr;}int middle  (int) Math.floor(arr.length / 2);int[] left  Arrays.copyOfRange(arr, 0, middle);int[] right  Arrays.copyOfRange(arr, middle, arr.length);return merge(sort(left), sort(right));}protected int[] merge(int[] left, int[] right) {int[] result  new int[left.length  right.length];int i  0;while (left.length  0  right.length  0) {if (left[0]  right[0]) {result[i]  left[0];                left  Arrays.copyOfRange(left, 1, left.length);} else {result[i]  right[0];right  Arrays.copyOfRange(right, 1, right.length);}}while (left.length  0) {result[i]  left[0];left  Arrays.copyOfRange(left, 1, left.length);}while (right.length  0) {result[i]  right[0];right  Arrays.copyOfRange(right, 1, right.length);}return result;} }PHP 实例 function mergeSort($arr){$len  count($arr);if ($len  2) {return $arr;}$middle  floor($len / 2);$left  array_slice($arr, 0, $middle);$right  array_slice($arr, $middle);return merge(mergeSort($left), mergeSort($right));}function merge($left, $right){    $result  [];while (count($left)  0  count($right)  0) {if ($left[0]  $right[0]) {$result[]  array_shift($left);} else {$result[]  array_shift($right);}}while (count($left))$result[]  array_shift($left);while (count($right))$result[]  array_shift($right);return $result; }C 实例 int min(int x, int y) {return x y ? x : y; } void merge_sort(int arr[], int len) {int *a arr;int *b (int *) malloc(len * sizeof(int));int seg, start;for (seg 1; seg len; seg seg) {for (start 0; start len; start seg * 2) {int low start, mid min(start seg, len), high min(start seg * 2, len);int k low;int start1 low, end1 mid;int start2 mid, end2 high;while (start1 end1 start2 end2)b[k] a[start1] a[start2] ? a[start1] : a[start2];while (start1 end1)b[k] a[start1];while (start2 end2)b[k] a[start2];}int *temp a;a b;b temp;}if (a ! arr) {int i;for (i 0; i len; i)b[i] a[i];b a;}free(b); }递归版 实例 void merge_sort_recursive(int arr[], int reg[], int start, int end) {if (start end)return;int len end - start, mid (len 1) start;int start1 start, end1 mid;int start2 mid 1, end2 end;merge_sort_recursive(arr, reg, start1, end1);merge_sort_recursive(arr, reg, start2, end2);int k start;while (start1 end1 start2 end2)reg[k] arr[start1] arr[start2] ? arr[start1] : arr[start2];while (start1 end1)reg[k] arr[start1];while (start2 end2)reg[k] arr[start2];for (k start; k end; k)arr[k] reg[k]; }void merge_sort(int arr[], const int len) {int reg[len];merge_sort_recursive(arr, reg, 0, len - 1); }C 迭代版 实例 templatetypename T // 整數或浮點數皆可使用,若要使用物件(class)時必須設定小於()的運算子功能 void merge_sort(T arr[], int len) {T *a arr;T *b new T[len];for (int seg 1; seg len; seg seg) {for (int start 0; start len; start seg seg) {int low start, mid min(start seg, len), high min(start seg seg, len);int k low;int start1 low, end1 mid;int start2 mid, end2 high;while (start1 end1 start2 end2)b[k] a[start1] a[start2] ? a[start1] : a[start2];while (start1 end1)b[k] a[start1];while (start2 end2)b[k] a[start2];}T *temp a;a b;b temp;}if (a ! arr) {for (int i 0; i len; i)b[i] a[i];b a;}delete[] b; }递归版 实例 void Merge(vectorint Array, int front, int mid, int end) {// preconditions:// Array[front...mid] is sorted// Array[mid1 ... end] is sorted// Copy Array[front ... mid] to LeftSubArray// Copy Array[mid1 ... end] to RightSubArrayvectorint LeftSubArray(Array.begin() front, Array.begin() mid 1);vectorint RightSubArray(Array.begin() mid 1, Array.begin() end 1);int idxLeft 0, idxRight 0;LeftSubArray.insert(LeftSubArray.end(), numeric_limitsint::max());RightSubArray.insert(RightSubArray.end(), numeric_limitsint::max());// Pick min of LeftSubArray[idxLeft] and RightSubArray[idxRight], and put into Array[i]for (int i front; i end; i) {if (LeftSubArray[idxLeft] RightSubArray[idxRight]) {Array[i] LeftSubArray[idxLeft];idxLeft;} else {Array[i] RightSubArray[idxRight];idxRight;}} }void MergeSort(vectorint Array, int front, int end) {if (front end)return;int mid (front end) / 2;MergeSort(Array, front, mid);MergeSort(Array, mid 1, end);Merge(Array, front, mid, end); }C# 实例 public static Listint sort(Listint lst) {if (lst.Count  1)return lst;int mid  lst.Count / 2;Listint left  new Listint();// 定义左侧ListListint right  new Listint();  // 定义右侧List// 以下兩個循環把 lst 分為左右兩個 Listfor (int i  0; i  mid; i)        left.Add(lst[i]);for (int j  mid; j  lst.Count; j)right.Add(lst[j]);left  sort(left);right  sort(right);return merge(left, right);} /// summary /// 合併兩個已經排好序的List /// /summary /// param nameleft左側List/param ///param nameright右側List/paramreturns/returnsstatic Listint merge(Listint left, Listint right) {Listint temp  new Listint();while (left.Count  0  right.Count  0) {if (left[0]  right[0]) {temp.Add(left[0]);left.RemoveAt(0);} else {temp.Add(right[0]);right.RemoveAt(0);}}if (left.Count  0) {for (int i  0; i  left.Count; i)temp.Add(left[i]);}    if (right.Count  0) {for (int i  0; i  right.Count; i)temp.Add(right[i]);}return temp;}Ruby 实例 def merge listreturn list if list.size  2pivot list.size / 2# Merge lambda { |left, right|final  []until left.empty? or right.empty?final  if left.first  right.first; left.shift else right.shiftendendfinal  left  right}.call merge(list[0...pivot]), merge(list[pivot..-1]) end
http://www.w-s-a.com/news/234638/

相关文章:

  • 一个域名可以做中英文两个网站吗搜索引擎营销的6种方式
  • 可以做ppt的网站天津网站建设怎么样
  • 网站怎么做的qq邮件订阅浙江省住房和城乡建设厅网站查询
  • 主机屋网站在线做图片
  • 河南省城乡住房建设厅网站wordpress登陆密码
  • 漳州做网站的公司搭建网站多少时间
  • 网站开发实习计划模板微营销手机
  • 网站设计与制作是做什么工作免费封面设计在线制作生成
  • 网站开发的教学课程网站广告调词软件
  • 进下加强新闻宣传网站建设入门 做网站 书籍
  • 电商网站主题photolux wordpress
  • 周口专业做网站公司深圳市宝安区松岗街道邮政编码
  • 上海企业网站推广方法网络营销策划方案框架
  • 一流的常州网站建设机械加工网报价
  • 上海响应式网站建设公司seo课程总结
  • vs网站开发教程昆山普立斯特做的有网站
  • 柳州网站seo网站swordpress 输出内容
  • 网站设计制作电话多少网站流量下降
  • 沈阳做网站推广的公司唐山哪家做网站好
  • 国外著名网站建设公司WordPress破解怎样主题修复
  • 网站建设济南云畅网络广州电力建设有限公司网站
  • 查看公司信息的网站思特奇是外包公司吗
  • 制作企业网站的目的啥都能看的浏览器
  • 做网站可以用哪些语言如何进行网站运营与规划
  • 做效果图网站有哪些电子商城网站制作数据库
  • 小刘网站建设wordpress调用php文件上传
  • 建设银行对账网站网络营销广告案例
  • 做网站开票是多少个点的票wordpress扫码提交数据库
  • 织梦网站改版需要怎么做企业网站备案管理系统
  • 大规模网站开发语言宁夏建设职业技术学院网站