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

兼职做问卷调查的网站好网站开发公司一站式服务

兼职做问卷调查的网站好,网站开发公司一站式服务,有没有好的网站可以学做头发,仁怀网站建设排序上 排序上 交换类排序 基本思想#xff1a;所谓交换#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置#xff0c;交换排序的特点是#xff1a;将键值较大的记录向序列的尾部移动#xff0c;键值较小的记录向序列的前部移动。 冒泡…排序上 排序上 交换类排序 基本思想所谓交换就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置交换排序的特点是将键值较大的记录向序列的尾部移动键值较小的记录向序列的前部移动。 冒泡排序 冒泡排序的特性总结 冒泡排序是一种非常容易理解的排序时间复杂度O(N^2)空间复杂度O(1)稳定性稳定 代码实现 void BublleSort(int*array, int size) {for (int i 0; i size - 1; i) //总共冒泡的趟数{//冒泡的方式-----用相邻元素进行比较for (int j 0; j size - i - 1; j) //一次冒泡{if (array[j]array[j 1])Swap(array[j], array[j 1]);}} }冒泡排序优化 void BublleSort(int*array, int size) { for (int i 0; i size - 1; i) //总共冒泡的趟数{int IsChange 0; //查看这一趟有没有交换//冒泡的方式-----用相邻元素进行比较for (int j 0; j size - i - 1; j) //一次冒泡{if (array[j]array[j 1]){Swap(array[j], array[j 1]);IsChange 1;} }if (!IsChange) //如果没有交换return;} }快速排序 一种二叉树结构的交换排序方法其基本思想为任取待排序元素序列中的某元素作为基准值按照该排序码将待排序集合分割成两子序列左子序列中所有元素均小于基准值右子序列中所有元素均大于基准值然后最左右子序列重复该过程直到所有元素都排列在相应位置上为止。 快速排序的特性总结 快速排序整体的综合性能和使用场景都是比较好的所以才敢叫快速排序时间复杂度O(N*logN)最差场景单支树O(N2)空间复杂度O(logN)稳定性不稳定快排参考链接 代码实现 int Partion(int*array, int left, int right) {//划分基准值 } void QuickSort(int *array, int left, int right) {if (right - left 1){int div Partion(array, left, right);QuickSort(array, left, div);QuickSort(array, div 1, right);} }划分基准值的方式 hoare版本 int Partion(int*array, int left, int right) {int key array[right - 1];int begin left;int end right - 1;while (beginend){//从前往后找比基准值大的元素找到就停下来,等于也往前走因为找的是大的while (begin endarray[begin] key)begin;//end从后往前找比基准值小的元素找到就停下来等于也往前走找的是小的不是等于while (begin endarray[end] key)end--;if (begin end)Swap(array[begin], array[end]);}if (begin ! right - 1)Swap(array[begin], array[right-1]);return begin; }挖坑法 int Partion2(int*array, int left, int right) {int key array[right - 1];int begin left;int end right - 1;while (beginend){while (beginendarray[begin] key)begin;if (beginend){//上一个坑是endbegin是比基准值大的数array[end] array[begin];end--;}while (beginendarray[end] key)end--;if (beginend){//上次坑是end填坑的是begin填完坑后begin成坑由新end比基准值小的数来填array[begin] array[end];begin;}}array[begin] key;return begin; }前后指针版本 int Partion3(int*array, int left, int right) {int key array[right - 1];int cur left;int pre cur - 1;while (curright){if (array[cur] key pre ! cur)Swap(array[cur], array[pre]);cur;}if (pre ! right - 1)Swap(array[pre], array[right - 1]);return pre; }快排的优化 三数取中法选key递归到小的子区间时可以考虑使用插入排序 三数取中法 //三数取中法 int GetMiddleIdx(int*array, int left, int right) {int mid left ((right - left) 1);//left mid right-1if (array[left] array[right - 1]){if (array[mid] array[left])return left;else if (array[mid]array[right - 1])return right - 1;elsereturn mid;}else{if (array[mid] array[left])return left;else if (array[mid] array[right - 1])return right - 1;elsereturn mid;} } int Partion(int*array, int left, int right) {int middle GetMiddleIdx(array, left, right);if (middle ! right - 1)Swap(array[middle], array[right - 1]);int key array[right - 1];int begin left;int end right - 1;while (beginend){//从前往后找比基准值大的元素找到就停下来,等于也往前走因为找的是大的while (begin endarray[begin] key)begin;//end从后往前找比基准值小的元素找到就停下来等于也往前走找的是小的不是等于while (begin endarray[end] key)end--;if (begin end)Swap(array[begin], array[end]);}if (begin ! right - 1)Swap(array[begin], array[right - 1]);return begin; }元素个数小用直接插入排序 void QuickSort(int *array, int left, int right) {if (right - left 16)//如果快排的元素个数没有达到16及其以上就用插入排序InsertSort(array, right - left);else{int div Partion(array, left, right);QuickSort(array, left, div);QuickSort(array, div 1, right);} }快速排序非递归写法 #includestack.h //快排非递归 void QuickSortNor(int*array, int size) {int left 0;int right size;Stack s;StackInit(s);StackPush(s,right);StackPush(s,left); //后进去的先出来先出来的是左while (!StackEmpty(s)){left StackTop(s);StackPop(s);right StackTop(s);StackPop(s);if (left right){int div Partion3(array, left, right);//先保存右半部分,先进后出来StackPush(s,right);//右半部分右边界StackPush(s, div 1);//右半部分左边界//再保存左边部分后进先出来StackPush(s, div);//左半部分右边界StackPush(s, left);//左半部分左边界}}StackDestroy(s); }归并排序 归并排序 基本思想 归并排序MERGE-SORT是建立在归并操作上的一种有效的排序算法,该算法是采用分治法Divide andConquer的一个非常典型的应用。将已有序的子序列合并得到完全有序的序列即先使每个子序列有序再使子序列段间有序。若将两个有序表合并成一个有序表称为二路归并。 归并排序的特性总结 归并的缺点在于需要O(N)的空间复杂度归并排序的思考更多的是解决在磁盘中的外排序问题。时间复杂度O(N*logN)空间复杂度O(N)稳定性稳定 代码实现 //归并到temp临时空间里 //两个有序序列合并成一个 void MergeData(int*array, int left, int mid, int right, int *temp) {int begin1 left, end1 mid;int begin2 mid, end2 right;int index left;while (begin1 end1 begin2 end2)//第一个和第二个区间里的元素没有处理完{if (array[begin1] array[begin2])temp[index] array[begin1];elsetemp[index] array[begin2];}//如果第一个空间里的数没有搬移完while (begin1 end1)temp[index] array[begin1];//第一个空间搬移完了第二个空间里的元素没有搬移完while (begin2 end2)temp[index] array[begin2]; } void _MergeSort(int*array, int left, int right,int*temp) {//int*temp(int*)malloc(sizeof(array[left])*(right-left));if (right - left1) //区间里的元素超过一个再排序{//找中间位置int mid left ((right - left) 1);_MergeSort(array, left, mid,temp);_MergeSort(array, mid, right,temp);MergeData(array, left, mid, right, temp);memcpy(array left, temp left, sizeof(array[left])*(right - left));} } void MergeSort(int *array, int size) {int *temp (int*)malloc(size*sizeof(array[0]));if (NULL temp){assert(0);return;}_MergeSort(array, 0, size, temp);free(temp); }归并排序非递归 void MergeSortNor(int *array, int size) {int *temp (int*)malloc(size*sizeof(array[0]));if (NULL temp){assert(0);return;}int gap 1;while (gap size){for (int i 0; i size; i 2 * gap){int left i;//左int mid left gap;//中int right mid gap;//右if (mid size)mid size;if (right size)right size;MergeData(array, left, mid, right, temp);}memcpy(array, temp, (sizeof(array[0])*size));gap * 2;}free(temp); }非比较排序 思想计数排序又称为鸽巢原理是对哈希直接定址法的变形应用。 操作步骤 统计相同元素出现次数根据统计的结果将序列回收到原来的序列中 计数排序的特性总结 计数排序在数据范围集中时效率很高但是适用范围及场景有限。时间复杂度O(MAX(N,范围))空间复杂度O(范围)稳定性稳定 代码实现 //场景:数据密集集中在某个范围中 void CountSort(int*array, int size) {int minVal array[0];//范围的左边界值int maxVal array[0];//范围的右边界值//1--找数据的范围for (int i 1; i size; i){if (array[i] minVal)minVal array[i];if (array[i]maxVal)maxVal array[i];}//2--计算保存计数的空间int range maxVal - minVal 1;int *temp (int*)malloc(sizeof(int)*range);if (NULL temp){assert(0);return;}//3---空间位置里全部置为0memset(temp, 0, sizeof(int)*range);//memeset 按一个一个字节赋值赋值0可以赋值其他值不行例如100给一个字节赋值100//4--统计每个数据出现的次数for (int i 0; i size; i){temp[array[i] - minVal];}//5--回收数据int index 0;for (int i 0; i range; i){while (temp[i]--) //当前元素值不为0说明该下标还有个数 {array[index] i minVal;}}free(temp); }计数排序参考链接 排序总结
http://www.zqtcl.cn/news/308795/

相关文章:

  • 成都旅游网站建设地址自己做的网站怎么被搜索出来
  • 网站建设免费免代码商城微网站如何做
  • 网站建设域名是什么东莞网络科技营销
  • 法语网站建设高端网站建设 骆
  • vue网站开发注意事项做设计想接外单去哪个网站好
  • 免费模板下载网站推荐苏州seo
  • 徐州市水利工程建设有限公司网站网站建设技术团队有多重要性
  • 合肥佰瑞网站搜索引擎优化步骤
  • 营销型网站建设亏1广西桂林天气预报15天
  • 想做一个网站平台怎么做公司网站建设费用估计
  • 电商网站开发平台pi netwo网页设计文件下载
  • 南平网站设计笔记本怎么建设网站
  • 舆情分析网站免费人工智能培训班收费标准
  • 青岛网站建设 大公司制作相册视频
  • 什么是网站的域名jquery素材网站
  • 课程网站建设ppt模板百度seo推广
  • 网站建设需要用到什么怎么在电脑上用手机app软件
  • 公司做网站有意义么网站认证必须做么
  • 网站虚拟空间更新缓存php外贸网站建设
  • 河南省建设执业资格注册中心网站门户定制网站建设公司
  • 网站开发比较厉害wordpress中文 插件
  • 文化投资的微网站怎么做个人微信公众号如何推广
  • 单位的网站怎样设计才美观网页设计图片的代码
  • 长沙专业做网站排名济南手机网站定制费用
  • 西安专题门户响应式网站建设系统网站有哪些
  • 山东省建设局网站监理员考试asp.net mvc6电商网站开发实践
  • 做网站需要提供什么资料网站备案是什么意思
  • 河南网站建设及推广东莞百度代做网站联系方式
  • 大型企业网站制作浦东新区做网站
  • 简单大气网站源码织梦怎么用框架实现在浏览器的地址栏只显示网站的域名而不显示出文件名