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

那个网站做拍手比较好网站开发去哪里培训

那个网站做拍手比较好,网站开发去哪里培训,怎么建设网站页面,网络营销推广方法研究时间复杂度O(n^2) 1、插入排序 (Insertion Sort) 从第一个元素开始#xff0c;该元素可以认为已经被排序#xff1b;取出下一个元素#xff0c;在已经排序的元素序列中从后向前扫描#xff1b;如果该元素#xff08;已排序#xff09;大于新元素#xff0c;将该元素移到…时间复杂度O(n^2) 1、插入排序 (Insertion Sort) 从第一个元素开始该元素可以认为已经被排序取出下一个元素在已经排序的元素序列中从后向前扫描如果该元素已排序大于新元素将该元素移到下一位置重复步骤直到找到已排序的元素小于或者等于新元素的位置将新元素插入到该位置后。 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[j 1] arr[j]; --j; } arr[j 1] key; } } 2、冒泡排序 (Bubble Sort) 重复地走访过要排序的数列一次比较两个元素如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换也就是说该数列已经排序完成。 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[j 1]) { std::swap(arr[j], arr[j 1]); } } } } 3、简单选择排序 (Selection Sort) 每一次从待排序的数据元素中选出最小或最大的一个元素存放在序列的起始位置直到全部待排序的数据元素排完。 void selectionSort(int arr[], int n) { for (int i 0; i n - 1; i) { int min_idx i; for (int j i 1; j n; j) { if (arr[j] arr[min_idx]) { min_idx j; } } std::swap(arr[min_idx], arr[i]); } } 时间复杂度O(nlog2n) 4、希尔排序(Shell Sort) 是插入排序的一种又称“缩小增量排序”是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法的基本思想是先将整个待排序的记录序列分割成为若干子序列由相隔某个“增量”的记录组成的分别进行直接插入排序然后依次缩减增量再进行排序待整个序列中的记录“基本有序”时再对全体记录进行一次直接插入排序。 这里只给出增量的简化选择实际应用中增量序列的选择会更复杂 void shellSort(int arr[], int n) { int gap n / 2; while (gap 0) { for (int i gap; i n; i) { int temp arr[i]; int j i; while (j gap arr[j - gap] temp) { arr[j] arr[j - gap]; j - gap; } arr[j] temp; } gap / 2; } } 5、快速排序(Quick Sort) 通过一趟排序将待排记录分隔成独立的两部分其中一部分记录的关键字均比另一部分的关键字小则可分别对这两部分记录继续进行排序以达到整个序列有序。 int partition(int arr[], int low, int high) { int pivot arr[high]; int i (low - 1); for (int j low; j high - 1; j) { if (arr[j] pivot) { i; std::swap(arr[i], arr[j]); } } std::swap(arr[i 1], arr[high]); return (i 1); } void quickSort(int arr[], int low, int high) { if (low high) { int pi partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi 1, high); } } 6、堆排序(Heap Sort) 堆排序是利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构并同时满足堆积的性质即子节点的键值或索引总是小于或者大于它的父节点。堆排序主要要解决两个问题 1如何根据给定的序列建初始堆 2如何在交换掉根结点后将剩下的结点调整为新的堆(筛选) void set(int p,int m){//小顶堆int i,j;ip;ji*2;while(jm){if(jm-1k[j]k[j1])//改为j;if(k[j]k[i])//改为则为大顶堆break;else{swap(k[i],k[j]);ij;ji*2;}} }void heapSort(){int i,j;for(in/2;i0;i--)//建堆set(i,n);for(in;i1;i--)//排序{swap(k[i],k[1]);set(1,i-1);} } 7、归并排序 (Merge Sort) 归并排序采用分治法的思想将数组分成两半分别对它们进行排序然后将结果合并起来。 1编写一个辅助函数来合并两个已排序的子数组。 2编写主归并排序函数该函数将递归地分解数组直到子数组只包含一个元素已排序然后合并这些子数组直到整个数组排序完成。 void merge(int arr[], int left[], int leftSize, int right[], int rightSize) { int i 0, j 0, k 0; while (i leftSize j rightSize) { if (left[i] right[j]) { arr[k] left[i]; } else { arr[k] right[j]; } } while (i leftSize) { arr[k] left[i]; } while (j rightSize) { arr[k] right[j]; } } void mergeSort(int arr[], int left, int right) { if (left right) { int mid left (right - left) / 2; int leftSize mid - left 1; int rightSize right - mid; int leftArr[leftSize], rightArr[rightSize]; // 拷贝数据到临时数组 for (int i 0; i leftSize; i) { leftArr[i] arr[left i]; } for (int j 0; j rightSize; j) { rightArr[j] arr[mid 1 j]; } // 递归地对子数组进行排序 mergeSort(leftArr, 0, leftSize - 1); mergeSort(rightArr, 0, rightSize - 1); // 合并两个已排序的子数组 merge(arr, leftArr, leftSize, rightArr, rightSize); } } 时间复杂度O(d(nrd)) 8、基数排序(Radix Sort) 基数排序是一种非比较型整数排序算法其原理是将整数按位数切割成不同的数字然后按每个位数分别比较。为了适用于负数和非整数这里给出一个简化的版本仅适用于非负整数并且假设所有整数的位数相同或可以通过填充前导零来使它们具有相同的位数。 #include vector #include algorithm void countingSort(std::vectorint arr, int exp) { std::vectorint output(arr.size()); std::vectorint count(10, 0); // 存储每个桶中的元素数量 for (int i 0; i arr.size(); i) count[(arr[i] / exp) % 10]; // 更改count[i]使其包含每个数字小于或等于i的数量 for (int i 1; i 10; i) count[i] count[i - 1]; // 构建输出数组 for (int i arr.size() - 1; i 0; i--) { output[count[(arr[i] / exp) % 10] - 1] arr[i]; count[(arr[i] / exp) % 10]--; } // 复制回原数组 for (int i 0; i arr.size(); i) arr[i] output[i]; } void radixsort(std::vectorint arr) { int maxVal *std::max_element(arr.begin(), arr.end()); // 找到最大数的位数 int exp 1; while (maxVal / exp 0) { countingSort(arr, exp); exp * 10; } } 或者 #include iostream #include cmath #include algorithm // 使用std::max来找到数组中的最大值 // 获取数组中的最大值 int getMax(int arr[], int n) { int mx arr[0]; for (int i 1; i n; i) { if (arr[i] mx) { mx arr[i]; } } return mx; } // 基数排序函数 void radixsort(int arr[], int n) { // 找到数组中的最大值 int maxVal getMax(arr, n); // 基数排序使用计数排序作为子程序 // 这里为了简单起见我们假设所有的整数都是非负的 // 如果有负数需要做适当的转换 // 对每一位执行计数排序 for (int exp 1; maxVal / exp 0; exp * 10) { int output[n]; // 输出数组 int count[10] {0}; // 计数器数组 // 存储每个元素的频次 for (int i 0; i n; i) { int index (arr[i] / exp) % 10; count[index]; } // 更改count[i]的值这样它现在包含位置i处之前的所有元素 for (int i 1; i 10; i) { count[i] count[i - 1]; } // 生成输出数组 for (int i n - 1; i 0; i--) { int index (arr[i] / exp) % 10; output[count[index] - 1] arr[i]; count[index]--; } // 将排序后的元素复制回原数组 for (int i 0; i n; i) { arr[i] output[i]; } } } int main() { int arr[] {170, 45, 75, 90, 802, 24, 2, 66}; int n sizeof(arr) / sizeof(arr[0]); radixsort(arr, n); std::cout Sorted array: \n; for (int i 0; i n; i) { std::cout arr[i] ; } std::cout std::endl; return 0; }
http://www.hkea.cn/news/14347811/

相关文章:

  • 网站登录账号密码保存WordPress数据库改名
  • 企业网站优化三层含义qq网页版 登陆
  • 云主机 几个网站上上海海网网站站建设
  • 云虚拟主机怎么建网站wordpress小兽
  • 可以做网站的编程有什么WordPress源码带会员中心系统
  • 怎么修改公司网站图片宁波网站推广合作商
  • 黑龙江省建设教育网站查询站长工具seo推广
  • 做智能网站系统长沙景点排行榜前十名
  • 需要证书的建筑公司网站wordpress描述怎么改
  • 简洁汽车配件网站模板网站代码如何导入
  • 排名好的网站建设企业建设网站的风险分析
  • 做贵网站多少钱陕西住房和城乡建设厅官网
  • 德庆网站建设网站时间显示
  • 泉州有哪些做网站的客源汇软件怎么样
  • 保险网站有哪些情感网站seo
  • 什么网站可以做装修效果图的企业主页图片
  • 网站建设与管理实践报告总结网站名申请
  • 门户网站建设专业dede后台做两个网站
  • 切管机维修 东莞网站建设小程序游戏怎么开发
  • 网站打不开显示asp空气炸锅做糕点的网站
  • 给别人做网站赚钱吗京东金融
  • 老薛主机wordpress模板wordpress 搜索引擎优化
  • 网站开速度 流失网页设计师个人网站
  • 自己怎么做商城网站视频教程中国建筑网官网查询系统
  • 织梦dedecms医院类网站在线预约挂号插件_utf8表白网
  • 网站助手 伪静态中国航空集团有限公司
  • cms与php做网站的区别信阳网
  • 设计网站推荐素材网站网站开发 协作平台
  • 欧莱雅网站建设与推广方案洛阳青峰做网站
  • 外贸营销网站推广建设比较好网站