直接插入排序与希尔排序

代码是何其的相似啊!!/*Name: InsertSortCopyright: Author: huowolf Date: 05/07/15 16:18Description: 直接插入排序的实现 */#include <iostream>using namespace std;int arr[]={-1,48,62,35,77,55,14,35,98};void InsertSort(int a[],int length); void Output(int a[],int length);int main(){InsertSort(arr,8); Output(arr,8);return 0;}void InsertSort(int a[],int length){int i,j;for(i=2;i<=length;i++){if(a[i]<a[i-1]){a[0] = a[i];//拷贝为哨兵for(j=i-1;a[0]<a[j];j–)a[j+1]=a[j];//记录后移,寻找插入位置a[j+1] = a[0];//插入} }}void Output(int a[],int length){for(int i=1;i<=length;i++)cout<<a[i]<<" "; }/*Name: ShellSort Copyright: Author: huowolf Date: 05/07/15 16:18Description: 希尔排序的实现 */#include <iostream>using namespace std;int arr[]={-1,48,62,35,77,55,14,35,98};void ShellSort(int a[],int length); void Output(int a[],int length);int main(){ShellSort(arr,8); Output(arr,8);return 0;}void ShellSort(int a[],int length){int i,j;int d = length;//将增量初始化为表长 do{d = d/3+1;//增量序列(一种比较经典的增量取法,但并没有给出最优性证明)for(i=d+1;i<=length;i++) {if(a[i]<a[i-d])//在同一子序列中相邻的前后元素{a[0] = a[i];for(j=i-d;j>0 && a[0]<a[j];j-=d)//记录后移,寻找插入位置a[j+d] = a[j];a[j+d] = a[0];}}}while(d>1);//增量为1,停止循环}void Output(int a[],int length){for(int i=1;i<=length;i++)cout<<a[i]<<" "; }

版权声明:本文为博主原创文章,,未经博主允许不得转载。

今天又是美好的一天,我要展示出我优秀的一面。不必一味讨好别人

直接插入排序与希尔排序

相关文章:

你感兴趣的文章:

标签云: