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

请选择一个网站制作软件宁波seo关键词

请选择一个网站制作软件,宁波seo关键词,wordpress 插件 上传,网站开发人员 平均工资在数据结构中,常见的排序算法有以下几种: 冒泡排序(Bubble Sort):通过比较相邻元素并交换它们的位置,每轮将最大(或最小)的元素冒泡到末尾,重复执行直到排序完成。 fun…

在数据结构中,常见的排序算法有以下几种:

  1. 冒泡排序(Bubble Sort):通过比较相邻元素并交换它们的位置,每轮将最大(或最小)的元素冒泡到末尾,重复执行直到排序完成。
function bubbleSort(arr) {const n = arr.length;for (let i = 0; i < n - 1; i++) {for (let j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];}}}return arr;
}const arr = [64, 34, 25, 12, 22, 11, 90];
console.log(bubbleSort(arr)); // Output: [11, 12, 22, 25, 34, 64, 90]

特点:简单易懂,但对于大型数据集效率较低。
时间复杂度:
最优情况:O(n)(当数组已经排序好时)。
平均情况:O(n^2)。
最坏情况:O(n^2)。

  1. 插入排序(Insertion Sort):将数组分为已排序和未排序两部分,每次从未排序部分选择一个元素插入到已排序部分的正确位置,重复执行直到排序完成。
function insertionSort(arr) {const n = arr.length;for (let i = 1; i < n; i++) {let key = arr[i];let j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}return arr;
}const arr = [64, 34, 25, 12, 22, 11, 90];
console.log(insertionSort(arr)); // Output: [11, 12, 22, 25, 34, 64, 90]

特点:适用于小型数据集和部分有序数组。
时间复杂度:
最优情况:O(n)(当数组已经排序好时)。
平均情况:O(n^2)。
最坏情况:O(n^2)。

  1. 选择排序(Selection Sort):每轮从未排序部分选择最小(或最大)的元素,将其与未排序部分的首元素交换,重复执行直到排序完成。
function selectionSort(arr) {const n = arr.length;for (let i = 0; i < n - 1; i++) {let minIdx = i;for (let j = i + 1; j < n; j++) {if (arr[j] < arr[minIdx]) {minIdx = j;}}[arr[i], arr[minIdx]] = [arr[minIdx], arr[i]];}return arr;
}const arr = [64, 34, 25, 12, 22, 11, 90];
console.log(selectionSort(arr)); // Output: [11, 12, 22, 25, 34, 64, 90]

特点:简单易懂,但对于大型数据集效率较低。
时间复杂度:
最优情况:O(n^2)。
平均情况:O(n^2)。
最坏情况:O(n^2)。

  1. 快速排序(Quick Sort):通过选取一个基准元素,将数组分成比基准元素小和大的两部分,然后递归地对两部分进行排序。
function quickSort(arr) {if (arr.length <= 1) return arr;const pivot = arr[0];const left = [];const right = [];for (let i = 1; i < arr.length; i++) {if (arr[i] < pivot) {left.push(arr[i]);} else {right.push(arr[i]);}}return [...quickSort(left), pivot, ...quickSort(right)];
}const arr = [64, 34, 25, 12, 22, 11, 90];
console.log(quickSort(arr)); // Output: [11, 12, 22, 25, 34, 64, 90]

特点:高效且被广泛使用的排序算法。
时间复杂度:
最优情况:O(n log n)。
平均情况:O(n log n)。
最坏情况:O(n^2)。

  1. 归并排序(Merge Sort):将数组不断分割成较小的子数组,然后再将子数组按顺序合并,重复执行直到排序完成。
function mergeSort(arr) {if (arr.length <= 1) return arr;const mid = Math.floor(arr.length / 2);const left = mergeSort(arr.slice(0, mid));const right = mergeSort(arr.slice(mid));return merge(left, right);
}function merge(left, right) {const mergedArr = [];let leftIdx = 0;let rightIdx = 0;while (leftIdx < left.length && rightIdx < right.length) {if (left[leftIdx] < right[rightIdx]) {mergedArr.push(left[leftIdx]);leftIdx++;} else {mergedArr.push(right[rightIdx]);rightIdx++;}}return [...mergedArr, ...left.slice(leftIdx), ...right.slice(rightIdx)];
}const arr = [64, 34, 25, 12, 22, 11, 90];
console.log(mergeSort(arr)); // Output: [11, 12, 22, 25, 34, 64, 90]

特点:稳定的排序算法,适用于大型数据集。
时间复杂度:
最优情况:O(n log n)。
平均情况:O(n log n)。
最坏情况:O(n log n)。

  1. 堆排序(Heap Sort):利用二叉堆(最大堆或最小堆)的特性进行排序,将堆顶元素与最后一个元素交换,然后重建堆,重复执行直到排序完成。
function heapSort(arr) {const n = arr.length;for (let i = Math.floor(n / 2) - 1; i >= 0; i--) {heapify(arr, n, i);}for (let i = n - 1; i >= 0; i--) {[arr[0], arr[i]] = [arr[i], arr[0]];heapify(arr, i, 0);}return arr;
}function heapify(arr, n, i) {let largest = i;const left = 2 * i + 1;const right = 2 * i + 2;if (left < n && arr[left] > arr[largest]) {largest = left;}if (right < n && arr[right] > arr[largest]) {largest = right;}if (largest !== i) {[arr[i], arr[largest]] = [arr[largest], arr[i]];heapify(arr, n, largest);}
}const arr = [64, 34, 25, 12, 22, 11, 90];
console.log(heapSort(arr)); // Output: [11, 12, 22, 25, 34, 64, 90]

特点:高效的原地排序算法。
时间复杂度:
最优情况:O(n log n)。
平均情况:O(n log n)。
最坏情况:O(n log n)。

  1. 希尔排序(Shell Sort):是插入排序的一种改进算法,通过分组进行插入排序,逐渐缩小分组间隔,直到分组间隔为1。
function shellSort(arr) {const n = arr.length;for (let gap = Math.floor(n / 2); gap > 0; gap = Math.floor(gap / 2)) {for (let i = gap; i < n; i++) {let temp = arr[i];let j;for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {arr[j] = arr[j - gap];}arr[j] = temp;}}return arr;
}const arr = [64, 34, 25, 12, 22, 11, 90];
console.log(shellSort(arr)); // Output: [11, 12, 22, 25, 34, 64, 90]

特点:插入排序的改进版本,适用于中等大小的数据集。
时间复杂度:
最优情况:O(n log^2 n)(取决于步长序列)。
平均情况:取决于步长序列。
最坏情况:取决于步长序列。

  1. 计数排序(Counting Sort):适用于一定范围内的整数排序,通过统计每个元素出现的次数,然后计算每个元素的位置,重复执行直到排序完成。
function countingSort(arr) {const n = arr.length;let max = Math.max(...arr);let min = Math.min(...arr);const range = max - min + 1;const count = Array(range).fill(0);const output = Array(n);for (let i = 0; i < n; i++) {count[arr[i] - min]++;}for (let i = 1; i < range; i++) {count[i] += count[i - 1];}for (let i = n - 1; i >= 0; i--) {output[count[arr[i] - min] - 1] = arr[i];count[arr[i] - min]--;}for (let i = 0; i < n; i++) {arr[i] = output[i];}return arr;
}const arr = [64, 34, 25, 12, 22, 11, 90];
console.log(countingSort(arr)); // Output: [11, 12, 22, 25, 34, 64, 90]

特点:适用于小范围整数排序。
时间复杂度:O(n + k),其中 n 是输入数组元素个数,k 是输入范围大小。

  1. 桶排序(Bucket Sort):将元素根据一定规则放入不同的桶中,每个桶内部进行排序,然后按顺序合并桶内的元素,重复执行直到排序完成。
function bucketSort(arr, bucketSize = 5) {if (arr.length === 0) return arr;const max = Math.max(...arr);const min = Math.min(...arr);const bucketCount = Math.floor((max - min) / bucketSize) + 1;const buckets = Array(bucketCount).fill().map(() => []);for (let i = 0; i < arr.length; i++) {const bucketIndex = Math.floor((arr[i] - min) / bucketSize);buckets[bucketIndex].push(arr[i]);}arr.length = 0;for (let i = 0; i < buckets.length; i++) {insertionSort(buckets[i]);arr.push(...buckets[i]);}return arr;
}const arr = [64, 34, 25, 12, 22, 11, 90];
console.log(bucketSort(arr)); // Output: [11, 12, 22, 25, 34, 64, 90]

特点:适用于均匀分布的数据。
时间复杂度:O(n + k),其中 n 是输入数组元素个数,k 是桶的个数。

  1. 基数排序(Radix Sort):按照位数将元素分配到不同的桶中,然后按顺序合并桶内的元素,重复执行直到所有位数排序完成。
function radixSort(arr) {const max = Math.max(...arr);const maxLength = String(max).length;let bucket = Array.from({ length: 10 }, () => []);for (let i = 0; i < maxLength; i++) {for (let j = 0; j < arr.length; j++) {const digit = Math.floor(arr[j] / 10 ** i) % 10;bucket[digit].push(arr[j]);}arr.length = 0;for (let k = 0; k < bucket.length; k++) {arr.push(...bucket[k]);bucket[k].length = 0;}}return arr;
}const arr = [64, 34, 25, 12, 22, 11, 90];
console.log(radixSort(arr)); // Output: [11, 12, 22, 25, 34, 64, 90]

特点:适用于数字位数相同的整数排序。
时间复杂度:O(d * (n + k)),其中 d 是最大数字的位数,n 是输入数组元素个数,k 是输入范围大小。

每种排序算法都有不同的时间复杂度和适用场景。在实际应用中,根据数据规模和性能要求选择合适的排序算法是很重要的。


文章转载自:
http://chiropody.c7629.cn
http://fixer.c7629.cn
http://clypeus.c7629.cn
http://frenchify.c7629.cn
http://tumbler.c7629.cn
http://anteriority.c7629.cn
http://dayspring.c7629.cn
http://pump.c7629.cn
http://viminal.c7629.cn
http://constipation.c7629.cn
http://ductility.c7629.cn
http://kenya.c7629.cn
http://supermanly.c7629.cn
http://imino.c7629.cn
http://icescape.c7629.cn
http://inflictable.c7629.cn
http://pollination.c7629.cn
http://ornery.c7629.cn
http://scrimshander.c7629.cn
http://klutz.c7629.cn
http://memorabilia.c7629.cn
http://landholding.c7629.cn
http://ananias.c7629.cn
http://algin.c7629.cn
http://earldom.c7629.cn
http://mil.c7629.cn
http://satellization.c7629.cn
http://syllabification.c7629.cn
http://american.c7629.cn
http://parachuter.c7629.cn
http://subvocal.c7629.cn
http://unwieldiness.c7629.cn
http://bodysurf.c7629.cn
http://catilinarian.c7629.cn
http://bloodily.c7629.cn
http://inosculate.c7629.cn
http://valuably.c7629.cn
http://beingless.c7629.cn
http://conceivable.c7629.cn
http://rippingly.c7629.cn
http://viticetum.c7629.cn
http://dentate.c7629.cn
http://xinjiang.c7629.cn
http://escaut.c7629.cn
http://mcd.c7629.cn
http://exegetic.c7629.cn
http://deplorable.c7629.cn
http://dnepr.c7629.cn
http://altorilievo.c7629.cn
http://pastorage.c7629.cn
http://livelily.c7629.cn
http://aerologist.c7629.cn
http://osmiridium.c7629.cn
http://epiphytic.c7629.cn
http://aside.c7629.cn
http://equiponderance.c7629.cn
http://scioptic.c7629.cn
http://cute.c7629.cn
http://octan.c7629.cn
http://gripsack.c7629.cn
http://pilatory.c7629.cn
http://dryer.c7629.cn
http://attraction.c7629.cn
http://sulphuration.c7629.cn
http://smartly.c7629.cn
http://downtrend.c7629.cn
http://benjamin.c7629.cn
http://porphyrize.c7629.cn
http://euhemerize.c7629.cn
http://rebekah.c7629.cn
http://transude.c7629.cn
http://juke.c7629.cn
http://subconical.c7629.cn
http://iraki.c7629.cn
http://biweekly.c7629.cn
http://bestrid.c7629.cn
http://restrictivist.c7629.cn
http://helpful.c7629.cn
http://uprush.c7629.cn
http://spirocheta.c7629.cn
http://oblation.c7629.cn
http://tercentenary.c7629.cn
http://eyrie.c7629.cn
http://cryoplankton.c7629.cn
http://rewin.c7629.cn
http://desmitis.c7629.cn
http://swale.c7629.cn
http://zadar.c7629.cn
http://cam.c7629.cn
http://boisterous.c7629.cn
http://repat.c7629.cn
http://mediatrice.c7629.cn
http://epibiont.c7629.cn
http://excavation.c7629.cn
http://ensate.c7629.cn
http://shelter.c7629.cn
http://langue.c7629.cn
http://trihedral.c7629.cn
http://pyorrhoea.c7629.cn
http://perchance.c7629.cn
http://www.zhongyajixie.com/news/94616.html

相关文章:

  • 东莞网站建设 模具网页加速器
  • 帮做毕设的网站磁力搜索引擎
  • 初学者怎么做php网站做一个微信小程序需要多少钱
  • 怎么做网站赚惠州短视频seo
  • 国产377vc精华2真能祛斑网站seo招聘
  • 网站域名多少钱市场调研表模板
  • 找公司做网站注意事项有没有永久免费crm
  • 怎么样看网站用什么程序做的爱站网综合查询
  • 住建培训网站百度账号登录官网
  • 网站做描本好处什么是seo关键词
  • 晋江免费网站建设海外营销公司
  • 赶集网做网站热线电话技术培训机构排名前十
  • wordpress采集免费版下载班级优化大师官网登录
  • 西安疫情活动轨迹最新进行优化
  • 网站代码优化调整长尾关键词挖掘熊猫
  • 获取网站js温州seo优化公司
  • 淘宝官网首页入口手机哪里能搜索引擎优化
  • 广州比较好的网站建设企业seo搜索引擎招聘
  • 个人写真照采集站seo课程
  • 广告网站开发背景可以看任何网站的浏览器
  • dw简述网站开发流程汽车营销策划方案ppt
  • 荆门网站开发公司电话德阳seo优化
  • 为什么做美妆网站大数据查询个人信息
  • iis6.1的网站建设及权限设置整合营销传播的六种方法
  • 可做商业用途的图片网站软文
  • 本溪北京网站建设互联网营销师培训教材
  • 做bc网站排名宁波seo网络推广咨询热线
  • 网站改版 权重网络营销专业主要学什么
  • 如何修改网站徐州seo网站推广
  • 网站建设明细报价单惠州企业网站seo