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

国内知名网站湖口网站建设

国内知名网站,湖口网站建设,网站的产品图片怎样做清晰,网站qq号获取目录 一、插入排序 1、直接插入排序 1.1、排序方法 1.2、图解分析 1.3、代码实现 2、希尔排序 2.1、排序方法 2.2、图解分析 2.3、代码实现 二、选择排序 1、直接选择排序 1.1、排序方法 1.2、图解分析 1.3、代码实现 2、堆排序 2.1、排序方法 2.2、图解分析 …目录 一、插入排序 1、直接插入排序 1.1、排序方法 1.2、图解分析 1.3、代码实现 2、希尔排序 2.1、排序方法 2.2、图解分析 2.3、代码实现 二、选择排序 1、直接选择排序 1.1、排序方法 1.2、图解分析 1.3、代码实现 2、堆排序 2.1、排序方法 2.2、图解分析 2.3、代码实现 三、交换排序 1、冒泡排序 1.1、排序方法 1.2、图解分析 1.3、代码实现 2、快速排序 2.1、hoare排序 2.1.1、图解分析 2.1.2、代码实现 2.2、挖坑法 2.2.1、图解分析 2.2.2、代码实现 2.3、前后指针法 2.3.1、图解分析 2.3.2、代码实现 四、归并排序 1、排序方法 2、图解分析 3、代码实现 一、插入排序 基本思想把待排序的数据按其关键码值的大小追个插入到一个有序序列中得到一个新的有序序列。 1、直接插入排序 1.1、排序方法 当插入第i个元素时数组的前i-1个元素已经有序将第i个元素与前i-1个元素的关键码值进行比较找到合适的位置插入并将该位置之后的所有元素顺序后移即可。 1.2、图解分析 1.3、代码实现 // 直接插入排序 void InsertSort(int* a, int n) {for (int i 0; i n; i){int tmp a[i];int end i-1;while (end 0){if (tmp a[end]){a[end 1] a[end];end--;}else{break;}}a[end 1] tmp;;} } 2、希尔排序 2.1、排序方法 希尔排序是对直接插入排序的优化。希尔排序的基本思想是先选定一个合理的增量gap把待排序文件中的数据分成gap个组每一组中的相邻元素位置相差gap的距离对每组元素各自进行直接插入排序。然后适当缩小gap重复上述操作。直到gap等于1时所有元素在同一组内最后一次直接插入排序。 2.2、图解分析 2.3、代码实现 // 希尔排序 void ShellSort(int* a, int n) {int gap n;while (gap 1){bool change false;gap gap / 3 1;for (int i 0; i n - gap; i){int end i;int tmp a[end gap];while (end 0){if (tmp a[end]){a[end gap] a[end];end-gap;change true; }else{break;}}a[end gap] tmp;;}if (change false){break;}} } 二、选择排序 基本思想每次从待排序元素中选出最大或最小的一个元素将其存放在已有序序列的后一个位置重复操作直到所有元素存放结束得到一个有序的新序列。 1、直接选择排序 1.1、排序方法 在元素集合arr[i]~arr[n-1]中选出关键码值最大小的元素若该元素不是第一个或最后一个则将其与这组元素中的第一个或最后一个元素进行交换对剩余未排序元素重复上述操作直到结束。 1.2、图解分析 1.3、代码实现 // 选择排序 void SelectSort(int* a, int n) {int begin_i 0;int end_i n-1;while (begin_i end_i){int max_i end_i;int min_i begin_i;for (int i begin_i; i end_i; i){if (a[i] a[min_i]){Swap(a[i], a[min_i]);}if (a[i] a[max_i]){Swap(a[i], a[max_i]);}}begin_i;end_i--;} } 2、堆排序 2.1、排序方法 堆排序的操作对象是堆排序会调整部分节点在堆中的相对位置为了不破坏堆的性质我们将堆顶节点与堆的最后一个节点交换再将除最后一个节点之外的其他节点通过向下调整算法调整成为一个新的堆。重复操作直到只剩下一个节点为止。 2.2、图解分析 2.3、代码实现 //堆排序typedef struct Heap {int* a;int size;int capacity; }Heap;//向下调整算法 void AdjustDwon(int* a, int n, Heap* hp) {for (int parent (n - 2) / 2; parent 0; parent--){int child parent * 2 1;while (child n){bool change false;if (child 1 n){child hp-a[child] hp-a[child 1] ? child : child 1;}if (hp-a[child] hp-a[parent]){int tmp hp-a[parent];hp-a[parent] hp-a[child];hp-a[child] tmp;change true;parent child;child parent * 2 1;}if (change false){break;}}} }//初始化堆 void InitialHeap(Heap* hp,int n) {if (!hp){return;}int* tmp (int*)malloc(sizeof(int) * n);if (!tmp){perror(InitialHeap::malloc:);return;}hp-a tmp;hp-size 0;hp-capacity n; }//创建堆 void HeapBuild(Heap* hp, int* a, int n) {assert(hp);for (int i 0; i n; i){hp-a[i] a[i];}AdjustDwon(a, n, hp); }//排序 void Sort(Heap* hp, int* a, int n) {int end n - 1;while (end 0){int tmp hp-a[0];hp-a[0] hp-a[end];hp-a[end] tmp;a[end] hp-a[end];end--;AdjustDwon(a, end, hp);}a[0] hp-a[0]; } 三、交换排序 基本思想根据序列中两个元素的关键码值的大小来判断是否需要交换他们在序列中的位置默认将关键码值较大的元素向序列的尾部移动关键码值较小的元素向序列的首部移动。 1、冒泡排序 1.1、排序方法 冒泡排序是将待排序元素的关键码值最大小的元素通过从前往后依次两两比较交换到最后面的位置。每操作一次可以确定一个元素在有序序列中的的位置。 1.2、图解分析 1.3、代码实现 // 冒泡排序 void BubbleSort(int* a, int n) {for (int j 1; j n; j){for (int i 0; i n - j; i){if (a[i] a[i 1]){int tmp a[i];a[i] a[i 1];a[i 1] tmp;}}} } 2、快速排序 基本思想快速排序是任取待排序元素序列中的某元素的关键码值作为基准值按照该基准值将待排序集合分割成左右两个子序列左子序列中所有元素均小于基准值右子序列中所有元素均大于基准值再对左右子序列重复该过程直到结束。 2.1、hoare排序 2.1.1、图解分析 key选左边从右边出发。保证了相遇位置的值比key位置的值小 key选右边从左边出发。保证了相遇位置的值比key位置的值大 注意key指的是下标 2.1.2、代码实现 // 快速排序hoare版本 int PartSort1(int* a, int left, int right) {int key left;while (left right){while (left right a[right] a[key]){right--;}while (leftright a[left]a[key]){left;}int tmp a[right];a[right] a[left];a[left] tmp;}int tmp a[key];a[key] a[left];a[left] tmp;return left; } 2.2、挖坑法 2.2.1、图解分析 注意 这里的key是一个变量不是下标 2.2.2、代码实现 // 快速排序挖坑法 int PartSort2(int* a, int left, int right) {int key a[left];int hole left;while (left right){while (hole right){if (a[right] key){a[hole] a[right];hole right;break;}right--;}while (hole left){if (a[left] key){a[hole] a[left];hole left;break;}left;}}a[hole] key;return hole; } 2.3、前后指针法 2.3.1、图解分析 这里的key同样是一个变量不是下标 2.3.2、代码实现 // 快速排序前后指针法 int PartSort3(int* a, int left, int right) {int prev left;int cur prev 1;int key a[left];while (cur right){if (a[cur] key){prev;int tmp a[prev];a[prev] a[cur];a[cur] tmp;}cur;}a[left] a[prev];a[prev] key;return prev; } 四、归并排序 1、排序方法 归并排序是建立在归并操作上的一种排序算法。归并排序是将已有序的子序列合并得到完全有序的序列即先使每个字序列有序再使子序列段间有序。归并排序的核心思想是先分解后合并。 2、图解分析 3、代码实现 // 归并排序递归实现void _MergeSort(int* a, int begin, int end, int* tmp) {if (begin end){return;}int mid (begin end) / 2;_MergeSort(a, begin, mid, tmp);_MergeSort(a, mid 1, end, tmp);int begin1 begin, end1 mid;int begin2 mid 1, end2 end;int i begin;while (begin1 end1 begin2 end2){if (a[begin1] a[begin2]){tmp[i] a[begin1];}else{tmp[i] a[begin2];}}while (begin1 end1){tmp[i] a[begin1];}while (begin2 end2){tmp[i] a[begin2];}memcpy(a begin, tmp begin, sizeof(int) * (end - begin 1)); }void MergeSort(int* a, int n) {int* tmp (int*)malloc(sizeof(int) * n);if (tmp NULL){perror(MergeSort--malloc:);return;}_MergeSort(a, 0, n - 1, tmp);free(tmp);tmp NULL; }
http://www.tj-hxxt.cn/news/143335.html

相关文章:

  • 河南省建设厅上班时间seo网站排名优化
  • 怎么自己制作网站免费游戏网页在线玩
  • 网站建设高端网站地图上搜索不到的公司正规吗
  • 网站建设哪家公司比较好2345网址大全最新版下载
  • 免费素材哪个网站比较好重庆网站设计制造厂家
  • 北京网站设计我选柚米网络媒体平台
  • 网站怎么做现场直播视频专门做奢侈品的网站有哪些
  • 专业网站建设费用怎么算一般招聘网站有哪些
  • 贷款 东莞网站建设网站建设员工分工
  • 做网站源码要给客户嘛本地手机网站建设服务
  • 站长工具精品ps做网站画布多大
  • 重庆信息网站推广在线作图软件
  • 广东品牌网站设计哈尔滨市营商环境建设监督局网站
  • 企业网站建站 费用梅州建站找哪家
  • 网站设计工具更好的做网站asp网站用ftp怎么替换图片
  • 网站页面怎么做企业网站cms系统论文
  • 中国企业网站设计案例宝安网页
  • 延吉 网站建设昆明网站建设一条龙服务
  • 中企动力做网站行吗东莞网站系统哪里好
  • 中国石油第一建设公司官网福建seo排名
  • 临沂建设网站公司汉中网站建设公司
  • 好的培训网站模板湖北响应式网站设计制作
  • 消防网站建设的风格合肥网站建设兼职
  • 国外 家具 网站模板下载做网站用哪个软件好
  • 建商城网站需要什么怎样做网站和网站的友情链接
  • 做网站的公司北京有哪些网络推广平台有哪些公司
  • 塘厦建设网站连云港企业做网站
  • 枣阳网站建设_枣阳山水数码wordpress 解析漏洞利用
  • 网站后台管理布局wordpress全站同一个标题
  • 百度卖货平台珠海seo网站建设