排序算法
来源:互联网 发布:淘宝优惠券群是真的吗 编辑:程序博客网 时间:2024/05/18 15:25
一 插入排序
1、直接插入排序
a、基本思想:将序列分成两部分,左边按关键字有序,右边无序,初始时,将最左边的第一个关键字作为左边有序部分。将右边第一个记录插入到左边序列中的适当位置,使得左边部分依然有序,这样左边长度加一,右边减一,如此继续下去,知道右边长度为0,这时,这个序列就变成有序序列了。
b、算法如下:
void Direct_Insert_Sort(int R[],int n){ for(int i=2; i<n; i++){ if(R[i]<R[i-1]){ R[0]=R[i];
int j; for(j=i-1;R[0]<R[j],j--){ R[j+1]=R[j]; } R[j+1]=R[0]; }}
2、 二分插入排序
a、基本思想:在直接插入排序的基础上,及左边有序的基础上,采用二分法查找插入的位置。
b、算法如下:
void Binary_Insert_Sort(int R[],int n){ for(int i =2;i<n;i++){ R[0]=R[i]; int low=1; int high=i-1;while(low<high){mid=(low+high)/2;if(R[0]>R[mid])low =mid+1;else high=mid-1;}for(int j=i-1;j>high+1;j--) R[j+1]=R[j];R[high+1]=R[0];}}
3、希尔排序
a、基本思想:将一个序列分成几个小序列,将这些小序列排序好,在对较长的序列进行排序。
b、算法如下:
void Shell_Insert_Sort(int R[],int n;int d[],int t){ for(k=0;k<t;k++){ dk =d[k];for(int i = dk;i<n;i++){ if(R[i]<R[i-dk]){R[0]=R[i]for(j=i-dk;j>0&&R[0]<R[j];j=j-dk)R[j+dk]=R[j];R[j+dk]=R[0];}}}}
二 交换排序
1、冒泡排序
a、基本思想:(升序排列)从序列最左边开始比较第一个记录与第二个的大小,并且根据比较结果确定是否交换,继续比较第三个与第二个记录的关键字,并且根据结果确定是否交换,一直进行到第n-i和第n-i+1个数据,冒泡排序第一趟完成后在进行第二趟,这样一直进行下去,知道某一趟没有发生数据交换为止。
b、算法如下:
void Bubble_Sort(int R[],int n){
for(int i=1;i<n;i++){
int swap =0;
for(int j=1;j<n-1;j++){
if(R[j]>R[j+1]){
R[0]=R[j+1];
R[j+1]=R[j];
R[j]=R[0];
swap =1;
}
if(swap == 0)break;
}
}
}
阅读全文
0 0
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- SICP 2.54 符号列表equal?
- 有客远来
- 搭建个人博客-hexo+github
- Java NIO 之阻塞与非阻塞
- PAT (Advanced Level) Practise 1109 Group Photo (25)
- 排序算法
- Updating a Dictionary
- nodejs学习(一)读文件,写文件,文件信息
- jq 添加元素
- [JZOJ5135][SDOI省队集训2017]逆序对
- 页面自动执行(加载)js的几种方法
- ZJOI2005独木舟上的旅行
- c++用户界面编程
- Cmake如何编译Qt程序