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

做团购网站需要多少钱绍兴seo包年排行榜

做团购网站需要多少钱,绍兴seo包年排行榜,wordpress ajax json,汽车商城网站模板一、常用排序说明 当涉及排序算法时#xff0c;理解每个算法的工作原理、时间复杂度和空间复杂度是至关重要的。下面对常用排序算法进行详细说明#xff1a; 1、冒泡排序#xff08;Bubble Sort#xff09;#xff1a; 工作原理#xff1a;比较相邻的元素并交换理解每个算法的工作原理、时间复杂度和空间复杂度是至关重要的。下面对常用排序算法进行详细说明      1、冒泡排序Bubble Sort 工作原理比较相邻的元素并交换每一轮将最大或最小的元素移动到数组末尾或开头。 时间复杂度平均情况和最坏情况均为 O(n^2)。 空间复杂度O(1)原地排序不需要额外空间。 适用场景适用于小规模数据集对稳定性要求高的场景或者作为教学和理解排序算法的基础。 2、选择排序Selection Sort 工作原理每一轮选择最小或最大的元素放在已排序序列的末尾或开头。 时间复杂度平均情况和最坏情况均为 O(n^2)。 空间复杂度O(1)原地排序不需要额外空间。 适用场景适用于小规模数据集简单易实现但性能较差。对稳定性要求不高的场景。 3、插入排序Insertion Sort 工作原理将未排序序列中的元素逐个插入到已排序序列中的适当位置。 时间复杂度平均情况和最坏情况均为 O(n^2)。 空间复杂度O(1)原地排序不需要额外空间。 适用场景适用于小规模或基本有序的数据集对稳定性要求高的场景用于改进其他排序算法的一部分。 4、希尔排序Shell Sort 工作原理是插入排序的改进版通过比较距离较远的元素进行交换最终使数据基本有序然后再使用插入排序。 时间复杂度取决于增量序列的选择在实践中介于 O(n log^2 n) 和 O(n^2) 之间。 空间复杂度O(1)原地排序不需要额外空间。 适用场景适用于小规模或基本有序的数据集对稳定性要求高的场景用于改进其他排序算法的一部分。 5、归并排序Merge Sort 工作原理采用分治法将数组分成两半分别排序然后合并两个有序数组。 时间复杂度平均情况和最坏情况均为 O(n log n)。 空间复杂度O(n)需要额外的内存来存储临时数组。 适用场景适用于小规模或基本有序的数据集对稳定性要求高的场景用于改进其他排序算法的一部分。 6、快速排序Quick Sort 工作原理采用分治法选取一个基准值将小于基准值的放在左边大于基准值的放在右边然后递归地对左右两部分进行排序。 时间复杂度平均情况为 O(n log n)最坏情况为 O(n^2)。 空间复杂度取决于实现方式通常为 O(log n)。 适用场景适用于大规模数据集性能优秀且易于实现。常用于实际生产环境中的排序需求。 7、堆排序Heap Sort 工作原理利用堆的性质最大堆或最小堆将待排序数组构建成堆然后每次取出堆顶元素重新调整堆直至完成排序。 时间复杂度平均情况和最坏情况均为 O(n log n)。 空间复杂度O(1)原地排序不需要额外空间。 适用场景适用于大规模数据集性能稳定且不受输入数据分布情况影响。适合内存受限的情况下进行排序。 8、计数排序Counting Sort 工作原理统计待排序数组中每个元素出现的次数然后根据元素的值将其放到正确的位置。 时间复杂度平均情况和最坏情况均为 O(n k)其中 k 是非负整数的最大值。 空间复杂度O(n k)需要额外空间来存储计数数组和输出数组。 适用场景适用于输入数据的范围相对较小但数量较大的情况下可以快速排序。对数字的频率进行统计。 9、桶排序Bucket Sort 工作原理将待排序数据分到有限数量的桶里每个桶再分别进行排序最后合并所有桶的结果。 时间复杂度平均情况为 O(n k)最坏情况为 O(n^2)。 空间复杂度O(n k)需要额外空间来存储计数数组和输出数组。 适用场景适用于数据均匀分布在一个范围内的情况下将数据分到多个桶中然后对每个桶单独进行排序。 10、基数排序Radix Sort 工作原理根据数字位进行排序先按个位排序再按十位排序依次类推直到最高位排序完成。 时间复杂度平均情况和最坏情况均为 O(d * (n k))其中 d 是数字位数k 是基数如 10 进制中的 10。 空间复杂度O(n k)需要额外空间来存储计数数组和输出数组。 适用场景适用于对数字进行排序的场景通过按位进行排序每次排序根据数字位数来确定效率高且稳定。 二、时间复杂度说明 O(1)常数时间复杂度。无论输入规模的大小如何算法的执行时间都是固定的。例如访问数组中的一个元素计算数组的长度等。无论数组中有多少个元素时间都是恒定的。 O(log n)对数时间复杂度。算法的执行时间与输入规模的对数成正比。典型的例子是二分查找算法。在一个有序数组中查找一个元素时每次都将搜索空间减半因此时间复杂度为对数级别。 O(n)线性时间复杂度。算法的执行时间与输入规模成正比呈线性增长。例如遍历数组或链表中的所有元素。如果一个数组有 n 个元素那么对每个元素的访问将花费 O(n) 的时间。 O(n log n)线性对数时间复杂度。典型的例子是快速排序和归并排序等基于比较的排序算法。这些算法的执行时间与输入规模的对数乘以线性成正比。 O(n^2)平方时间复杂度。算法的执行时间与输入规模的平方成正比。例如嵌套循环的排序算法如冒泡排序、选择排序每个元素都需要与其他元素比较。 O(2^n)指数时间复杂度。通常出现在递归算法中每次递归都会产生指数级别的子问题。例如求解所有可能的子集或排列问题。 O(n!)阶乘时间复杂度。通常出现在全排列等组合问题中需要计算所有可能的排列。例如求解 n 个元素的所有排列可能性的问题。 三、空间复杂度说明 O(1)常数空间复杂度。算法的额外空间使用是一个固定的常数与输入规模无关。例如原地排序算法如冒泡排序、选择排序不需要额外的空间。 O(log n)对数空间复杂度。算法的额外空间使用与输入规模的对数成正比。例如递归算法每次调用都会消耗对数级别的栈空间。二分搜索的递归版本就是一个典型的例子。 O(n)线性空间复杂度。算法的额外空间使用与输入规模成正比呈线性增长。例如需要一个与输入规模相同大小的数组来存储数据或者使用一个辅助数组来进行排序。 O(n^2)平方空间复杂度。算法的额外空间使用与输入规模的平方成正比。例如使用一个二维数组来存储所有可能的组合情况。 O(2^n)指数空间复杂度。算法的额外空间使用与输入规模的指数成正比。通常出现在递归的指数增长情况下例如子集生成问题。 O(n!)阶乘空间复杂度。算法的额外空间使用与输入规模的阶乘成正比。通常出现在全排列等组合问题中需要存储所有可能的排列。 四、代码样例 (一) 冒泡排序Bubble Sort #include iostream using namespace std;void bubbleSort(int arr[], int n) {for (int i 0; i n-1; i) {for (int j 0; j n-i-1; j) {if (arr[j] arr[j1]) {swap(arr[j], arr[j1]);}}} }int main() {int arr[] {64, 34, 25, 12, 22, 11, 90};int n sizeof(arr) / sizeof(arr[0]);bubbleSort(arr, n);cout Sorted array: ;for (int i 0; i n; i) {cout arr[i] ;}cout endl;return 0; }(二) 选择排序Selection Sort #include iostream using namespace std;void selectionSort(int arr[], int n) {for (int i 0; i n-1; i) {int min_idx i;for (int j i1; j n; j) {if (arr[j] arr[min_idx]) {min_idx j;}}swap(arr[i], arr[min_idx]);} }int main() {int arr[] {64, 34, 25, 12, 22, 11, 90};int n sizeof(arr) / sizeof(arr[0]);selectionSort(arr, n);cout Sorted array: ;for (int i 0; i n; i) {cout arr[i] ;}cout endl;return 0; }(三) 插入排序Insertion Sort #include iostream using namespace std;void insertionSort(int arr[], int n) {for (int i 1; i n; i) {int key arr[i];int j i - 1;while (j 0 arr[j] key) {arr[j1] arr[j];j--;}arr[j1] key;} }int main() {int arr[] {64, 34, 25, 12, 22, 11, 90};int n sizeof(arr) / sizeof(arr[0]);insertionSort(arr, n);cout Sorted array: ;for (int i 0; i n; i) {cout arr[i] ;}cout endl;return 0; }(四) 希尔排序Shell Sort #include iostream using namespace std;void shellSort(int arr[], int n) {for (int gap n/2; gap 0; gap / 2) {for (int i gap; i n; i) {int temp arr[i];int j;for (j i; j gap arr[j - gap] temp; j - gap) {arr[j] arr[j - gap];}arr[j] temp;}} }int main() {int arr[] {64, 34, 25, 12, 22, 11, 90};int n sizeof(arr) / sizeof(arr[0]);shellSort(arr, n);cout Sorted array: ;for (int i 0; i n; i) {cout arr[i] ;}cout endl;return 0; }(五) 归并排序Merge Sort #include iostream #include vector using namespace std;void merge(vectorint arr, int l, int m, int r) {int n1 m - l 1;int n2 r - m;vectorint L(n1), R(n2);for (int i 0; i n1; i)L[i] arr[l i];for (int j 0; j n2; j)R[j] arr[m 1 j];int i 0, j 0, k l;while (i n1 j n2) {if (L[i] R[j]) {arr[k] L[i];i;} else {arr[k] R[j];j;}k;}while (i n1) {arr[k] L[i];i;k;}while (j n2) {arr[k] R[j];j;k;} }void mergeSort(vectorint arr, int l, int r) {if (l r) {int m l (r - l) / 2;mergeSort(arr, l, m);mergeSort(arr, m 1, r);merge(arr, l, m, r);} }int main() {vectorint arr {64, 34, 25, 12, 22, 11, 90};int n arr.size();mergeSort(arr, 0, n - 1);cout Sorted array: ;for (int i 0; i n; i)cout arr[i] ;cout endl;return 0; }(六) 快速排序Quick Sort #include iostream #include vector using namespace std;int partition(vectorint arr, int low, int high) {int pivot arr[high];int i low - 1;for (int j low; j high; j) {if (arr[j] pivot) {i;swap(arr[i], arr[j]);}}swap(arr[i 1], arr[high]);return i 1; }void quickSort(vectorint arr, int low, int high) {if (low high) {int pi partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi 1, high);} }int main() {vectorint arr {64, 34, 25, 12, 22, 11, 90};int n arr.size();quickSort(arr, 0, n - 1);cout Sorted array: ;for (int i 0; i n; i)cout arr[i] ;cout endl;return 0; }(七) 堆排序Heap Sort #include iostream #include vector using namespace std;void heapify(vectorint arr, int n, int i) {int largest i;int l 2 * i 1;int r 2 * i 2;if (l n arr[l] arr[largest])largest l;if (r n arr[r] arr[largest])largest r;if (largest ! i) {swap(arr[i], arr[largest]);heapify(arr, n, largest);} }void heapSort(vectorint arr) {int n arr.size();for (int i n / 2 - 1; i 0; i--)heapify(arr, n, i);for (int i n - 1; i 0; i--) {swap(arr[0], arr[i]);heapify(arr, i, 0);} }int main() {vectorint arr {64, 34, 25, 12, 22, 11, 90};int n arr.size();heapSort(arr);cout Sorted array: ;for (int i 0; i n; i)cout arr[i] ;cout endl;return 0; }(八) 计数排序Counting Sort #include iostream #include vector using namespace std;void countingSort(vectorint arr) {int n arr.size();int maxVal *max_element(arr.begin(), arr.end());int minVal *min_element(arr.begin(), arr.end());int range maxVal - minVal 1;vectorint count(range), output(n);for (int i 0; i n; i)count[arr[i] - minVal];for (int i 1; i range; i)count[i] count[i - 1];for (int i n - 1; i 0; i--) {output[count[arr[i] - minVal] - 1] arr[i];count[arr[i] - minVal]--;}for (int i 0; i n; i)arr[i] output[i]; }int main() {vectorint arr {64, 34, 25, 12, 22, 11, 90};countingSort(arr);cout Sorted array: ;for (int i 0; i arr.size(); i)cout arr[i] ;cout endl;return 0; }(九) 桶排序Bucket Sort #include iostream #include vector #include algorithm using namespace std;void bucketSort(vectorfloat arr) {int n arr.size();vectorvectorfloat buckets(n);for (int i 0; i n; i) {int bucketIndex n * arr[i];buckets[bucketIndex].push_back(arr[i]);}for (int i 0; i n; i)sort(buckets[i].begin(), buckets[i].end());int index 0;for (int i 0; i n; i) {for (float num : buckets[i]) {arr[index] num;}} }int main() {vectorfloat arr {0.64, 0.34, 0.25, 0.12, 0.22, 0.11, 0.90};bucketSort(arr);cout Sorted array: ;for (int i 0; i arr.size(); i)cout arr[i] ;cout endl;return 0; }(十) 基数排序Radix Sort #include iostream #include vector #include algorithm using namespace std;int getMax(vectorint arr) {int maxVal arr[0];for (int i 1; i arr.size(); i) {if (arr[i] maxVal)maxVal arr[i];}return maxVal; }void countingSort(vectorint arr, int exp) {int n arr.size();vectorint output(n), count(10);for (int i 0; i n; i)count[(arr[i] / exp) % 10];for (int i 1; i 10; i)count[i] count[i - 1];for (int i n - 1; i 0; i--) {output[count[(arr[i] / exp) % 10] - 1] arr[i];count[(arr[i] / exp) % 10]--;}for (int i 0; i n; i)arr[i] output[i]; }void radixSort(vectorint arr) {int maxVal getMax(arr);for (int exp 1; maxVal / exp 0; exp * 10)countingSort(arr, exp); }int main() {vectorint arr {64, 34, 25, 12, 22, 11, 90};radixSort(arr);cout Sorted array: ;for (int i 0; i arr.size(); i)cout arr[i] ;cout endl;return 0; }
http://www.w-s-a.com/news/256609/

相关文章:

  • 网页设计专业设计课程googleseo排名公司
  • 网站百度百科那些免费网站可以做国外贸易
  • 做视频的网站有哪些南京计算机培训机构哪个最好
  • ppt做视频 模板下载网站商业街网站建设方案
  • 佛山网站定制开发星光影视园网站建设案例
  • wordpress子站点商务网页设计与制作微课版答案
  • 山东省住房城乡和建设厅网站软件开发主要几个步骤
  • 可以接项目做的网站网站源码php
  • 杭州广众建设工程有限公司网站网页游戏人气排行榜
  • 上海网站开发建设最简单的网站代码
  • 东莞做网站建设免费网站建设案例
  • 莱州建设局网站wordpress的主题下载地址
  • 二级网站域名长沙企业关键词优化服务质量
  • 在家有电脑怎么做网站wordpress 入门主题
  • 什邡建设局网站sem推广是什么意思
  • 西安分类信息网站网站敏感关键词
  • 黑彩网站怎么做建设网站费用分析
  • 网站关键词选取的步骤和方法小程序商城哪家好排行榜
  • 儿童产品网站建设网站建设优化排名推广
  • 做网站的硬件无锡招标网官方网站
  • 做推送好用的网站合肥网站推广培训
  • 网站开发团队简介贵阳双龙区建设局网站
  • 新乡做网站公司哪家好wordpress侧边栏文件
  • 小白建站怎么撤销网站备案
  • 哪个网站做调查问卷赚钱短视频制作神器
  • 上海企业响应式网站建设推荐汕头网络优化排名
  • 怎么建立公司网站平台怎么将网站做成公司官网
  • 培训学校网站怎样快速建设网站模板
  • 建设电子商务网站论文云服务器安装wordpress
  • 做展板好的网站学校的网站开发过程