C语言 指针练习-希尔排序法
2011-12-31 22:20
302 查看
#include <stdio.h> void print_result(float *,int); void Shell_Sort(float *,int); int main() { int i; float array[10]; float * pointer; printf("请输入10个数:\n"); for(i=0;i<10;i++) { scanf("%f",&array[i]); } pointer=array; Shell_Sort(pointer,10); print_result(pointer,10); return 0; } void print_result(float *p,int n) { //输出结果 int k; for(k=0;k<n;k++) { printf("%g\t",*(p+k)); } } void Shell_Sort(float *pt,int n) {//全用指针的希尔排序法 int d=n; //增量初值 int i,j; float tempnum; do { d/=2; //求下一增量 //以下为一趟增量为d的希尔插入排序; for(i=d; i<n;i++) //将array[d+1,...n]分别插入各组当前的有序区 { if(*(pt+i) > *(pt+i-d)){ tempnum=*(pt+i); j=i-d; //tempnum只是暂存单元,不是哨兵; do{ //查找a[i]的插入位置 *(pt+j+d)=*(pt+j) ; //后移记录 j-=d; //查找前一记录 }while(j>=0&&tempnum>*(pt+j)); *(pt+j+d)=tempnum; //插入array[i]到正确的位置上 } } }while(d>1); }
附加以前做的希尔排序图及代码:
////======================================= void Shellpass(int a[],int d,int n) {//希尔排序法中的一趟排序,d为增量 int i,j,t; int c; for(i=d; i<n;i++) //将a[d+1,...n]分别插入各组当前的有序区 { if(a[i]<a[i-d]){ t=a[i]; j=i-d; //t只是暂存单元,不是哨兵; do{ //查找a[i]的插入位置 a[j+d]=a[j]; //后移记录 j-=d; //查找前一记录 }while(j>=0&&t<a[j]); a[j+d]=t; //插入a[i]到正确的位置上 c=' '; } else { c='.'; } int l; for(l=0;l<n;l++) { printf("%3c%c",a[l],c); } printf("\n"); } printf("\n"); } void ShellSort(int a[],int n) { printf("\n希尔排序法过程:\n"); int increment=n; //增量初值 do { increment/=2; //求下一增量 Shellpass(a,increment,n); //一趟增量为increment的希尔插入排序; }while(increment>1); }
相关文章推荐
- 第09天C语言(06):指针综合练习
- C语言 指针练习-冒泡排序法
- C语言 指针练习-选择排序法
- C语言----------------指针小程序练习(二)
- C语言指针练习之不等长字符排序
- C语言编程(练习1:数组和指针)
- C语言 指针操作练习
- [iOS]C语言技术视频-15-指针变量高级用法练习一(函数指针完成动态排序)
- C语言指针练习之矩形法求定积分
- C语言编程(练习2:数组和指针)
- ID 比较练习 C语言 文件操作 位置指针
- C语言指针练习2
- 为学IOS,进击中...之C语言指针练习
- C语言编程(练习3:数组与指针)
- c语言之指针练习
- c语言指针使用小练习
- C语言 指针练习-直接插入排序法
- C语言编程练习(通过指针调换输入数字)
- C语言编程(练习5:数组与指针)
- C语言编程(练习4:数组与指针)