- #include<stdio.h>
- #include<malloc.h>
- void Ipub(int *,int);
- int main()
- {
- int *p=NULL,n,i;
- scanf("%d",&n);
- p=(int *)malloc(sizeof(int)*n);
- for(i=0;i<n;i++)
- scanf("%d",&p[i]);
- Ipub(p,n);
- for(i=0;i<n;i++)
- printf("%d/n",p[i]);
- free(p);
- return 0;
- }
- void Ipub(int *p,int n)
- {
- int head,last,temp,i,j;
- head=0;
- last=n-1;
- while(last>head) //控制排序终止条件
- {
- j=last-1;
- last=0;
- for(i=head;i<=j;i++) //首先将下标在i~j+1内的最大值放到p[j+1]内,同时记录最新的尾部
- {
- if(p[i]>p[i+1])
- {
- temp=p[i];
- p[i]=p[i+1];
- p[i+1]=temp;
- last=i; //记录尾部
- }
- }
- j=head+1;
- head=0;
- for(i=last;i>=j;i--) //从尾部开始,将下标为last~j-1的元素中的最小值放到p[j-1]中,同时记录最新的头部
- {
- if(p[i]<p[i-1])
- {
- temp=p[i];
- p[i]=p[i-1];
- p[i-1]=temp;
- head=i; //记录头部
- }
- }
- }
- }
代码仅供参考,不足之处请指正。