排序算法之快速排序和归并排序
来源:互联网 发布:第九届杭州网络文化节 编辑:程序博客网 时间:2024/06/07 05:31
之所以将快速排序和归并排序是因为二者都用到了分治的思想,快速排序是冒泡法的一种改进。
1.快速排序
思想:在待排的n个数中,将第一个数做基准值,把序列分为三个组,第一个组中数据小于基准值,第二个组中数为基准值,第三个组中数据大于基准值,这是第一趟分割;再对第一组和第三组数进行上述处理,直至每组只有一个数据。
实现:(VC6.0运行通过)
#include<stdio.h>void kuaipai(int a[],int start,int end){ int i,j,temp,x; i=start; j=end; x=a[start];//选取基准值 while(i<j) { while(i<j && x<a[j])//从右向左搜索小于基准值的数 j--; if(i<j)//将该数与基准值调换 { temp=x; x=a[j]; a[j]=temp; } while(i<j && x>a[i])从左向右搜索大于基准值的数 i++; if(i<j)//将该数与基准值交换 { temp=x; x=a[i]; a[i]=temp; } if(start<j) kuaipai(a,start,j-1); if(i<end) kuaipai(a,j+1,end); }//最终实现基准值左边数小于它,右边数大于它}void print(int s[],int n){ int i; for(i=0;i<n;i++) printf("%d ",s[i]); printf("\n");}void main(){ int a[]={5,6,1,3,4,2,8};print(a,7);kuaipai(a,0,6);print(a,7);}
2.归并排序
思想:在《数据结构》中归并是将两个有序数组合并为一个有序数组,应用到排序中,可以不断将待排序列进行分割,直到每个序列长度为1,直到两两数比较,再两两相邻的有序子序列合并,不断重复合并子序列,最终为有序表。
实现:(VC6.0问题未解决)
#include<stdio.h>void merge(int a[],int start,int mid,int end,int temp[])//实现start--mid和mid+1--end的一次合并排序,假设二者均为有序序列{ int i,j,x,k; k=0; i=start; j=mid+1; x=a[0]; while(i<=mid && j<=end) { if(a[i]<=a[j]) temp[k++]=a[i++]; else temp[k++]=a[j++]; } while(i<=mid) temp[k++]=a[i++]; while(j<end) temp[k++]=a[j++]; /* for(i=0;i<k;i++) a[i]=temp[i]; */}void mergesort(int s[],int start,int end,int temp[]){ int mid; if(start<end) { mid=(start+end)/2; mergesort(s,start,mid,temp); mergesort(s,mid+1,end,temp); merge(s,start,mid,end,temp); }}void print(int s[],int n){ int i; for(i=0;i<n;i++) printf("%d ",s[i]); printf("\n");}void main(){ int i; int b[7]; int a[]={5,6,1,3,4,2,8}; print(a,7); mergesort(a,0,7,b); print(b,7);}
0 0
- 排序算法之快速排序和归并排序
- 排序算法之快速排序和归并排序
- 排序之归并排序和快速排序
- 排序算法二之快速 归并排序
- 排序算法之插入排序、归并排序、快速排序
- 排序算法总结之快速排序、归并排序、shell排序
- 归并排序和快速排序算法实现
- Python算法 归并排序和快速排序
- 快速排序和归并排序算法
- 排序算法之快速排序、归并排序(java实现)
- 常用排序算法2--归并排序和快速排序
- 排序之归并、快速排序
- 排序算法2-快速排序、归并排序
- 快速排序和归并排序
- 归并排序和快速排序
- 归并排序和快速排序
- 归并排序和快速排序
- 归并排序和快速排序
- 实现俄罗斯方块的左移,右移,加速下移和旋转
- Python:如何将字符串作为变量名
- 嵌入式 DirectFB
- SASS入门之SASS安装
- StoryBoard
- 排序算法之快速排序和归并排序
- android 开发 命名规范
- Asp.net mvc
- C 宏和位操作
- kissXml和GData使用配置
- 1.TwoSum-Leetcode
- 【js】:js中的确认框,提示框和确认框的使用
- android与js的交互
- Android事件机制