代码是何其的相似啊!!
/* Name: InsertSort Copyright: Author: huowolf Date: 05/07/15 16:18 Description: 直接插入排序的实现 */ #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:18 Description: 希尔排序的实现 */ #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]<<" "; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-29 19:09:41