数据结构之排序(冒泡排序、快速排序)

  1 #include "stdio.h"
  2 #define N 100
  3 typedef int KeyType;
  4 typedef char InfoType[10];
  5 typedef struct
  6 {
  7     KeyType key;
  8     InfoType date;
  9 
 10 }RecType;
 11 
 12 //冒泡排序
 13 void Bubble_Sort1(RecType R[],int n)
 14 {
 15     int i,j,temp;
 16     //比较相邻两个数据,前面的比较大就交换位置
 17     for(i=0;i<n;i++)
 18         for(j=i+1;j<n;j++)
 19             if(R[i].key >R[j].key )
 20             {
 21                 temp=R[i].key ;
 22                 R[i].key =R[j].key ;
 23                 R[j].key =temp;
 24             }
 25 }
 26 //冒泡排序--输出每一步排序后的结果
 27 void Bubble_Sort2(RecType R[],int n)    
 28 {
 29     int i,j,k;
 30     RecType temp;
 31     for(i=0;i<n-1;i++)
 32     {
 33         for(j=n-1;j>i;j--)
 34             //比较 找出本趟排序的最小关键字的记录
 35             if(R[j].key <R[j-1].key )//若改为大于则是最大数沉底
 36             {//将最小关键字前移
 37                 temp=R[j];
 38                 R[j]=R[j-1];
 39                 R[j-1]=temp;
 40             }
 41             printf("i=%d,冒出最小的关键字:%3d,结果为:",i,R[i].key );
 42                 for(k=0;k<n;k++)
 43                     printf("%3d ",R[k].key );
 44                 printf("\n\n");
 45     }
 46 }
 47 
 48 
 49 //快速排序
 50 void QuickSort(RecType R[],int low,int high)
 51 
 52 {
 53     int i=low,j=high,k;
 54     RecType temp;
 55     temp=R[i];
 56     if(i<j)
 57     {
 58         while(i!=j)
 59         {
 60             while(j>i&&R[j].key >temp.key )
 61                 j--;//R[j]不变,j前移
 62             if(j>i)
 63             {
 64             R[i]=R[j];
 65             i++;
 66             }
 67             while( j>i&&R[i].key <temp.key )
 68                 i++;//R[i]不变,i前移
 69             if(j>i)
 70             {
 71             R[j]=R[i];
 72             j--;
 73             }
 74         
 75             
 76         }
 77         R[i]=temp;
 78         printf("划分区间为R[%d...%d],结果为:",low,high);
 79         //输出每趟的排序结果
 80         for(k=0;k<10;k++)
 81         {    if(k==i)
 82                 printf("   [%d]",R[k].key );
 83             else printf("%5d",R[k].key );
 84         }
 85         
 86     printf("\n");
 87             QuickSort(R,low,i-1);//对左区间递归排序
 88             
 89             QuickSort(R,i+1,high);//对右区间递归排序
 90     }
 91 
 92 }
 93 void main()
 94 {
 95     RecType R[N];
 96     int n=10;
 97     int a[]={256,301,751,129,937,863,742,694,76,438};
 98     for( int i=0;i<n;i++)
 99         R[i].key =a[i];
100 
101     printf("初始关键字序列:\n   ");
102     for(i=0;i<n;i++)
103         printf(" %3d ",R[i].key );
104     printf("\n\n");
105     Bubble_Sort1(R,n);
106     printf("冒泡排序(从大到小)的结果如下:\n  ");
107     for(i=0;i<n;i++)
108         printf(" %3d ",R[i].key );
109     printf("\n\n\n");
110    
111     for(  i=0;i<n;i++)
112         R[i].key =a[i];
113     printf("\n初始关键字序列:\n   ");
114     for(i=0;i<n;i++)
115         printf(" %3d ",R[i].key );
116     printf("\n\n");
117     Bubble_Sort2(R,n);
118     printf("最后结果:\n");
119     for(i=0;i<n;i++)
120         printf(" %3d ",R[i].key );
121     printf("\n");
122 
123     for(  i=0;i<n;i++)
124         R[i].key =a[i];
125     printf("\n\n初始关键字序列:\n   ");
126     for(i=0;i<n;i++)
127         printf(" %3d ",R[i].key );
128     printf("\n\n");
129     QuickSort(R,0,n-1);
130     printf("最后结果:\n");
131     for(i=0;i<n;i++)
132         printf(" %3d ",R[i].key );
133     printf("\n");
134 
135 }

 在实现快速排序算法时,弄成了死循环,一直找不出来问题在哪里,调试之后发现是输出结果中for循环本应该是for(k=0;k<n;k++)的语句写成了for(k=0;k<n;i++)使得k<n恒成立,然后就变成死循环了。(害我找得好苦)经过前面的大量训练,我已经能够不参考PPT的代码自己写出代码了(当然前提是弄懂算法实现的过程),也慢慢觉得编程编得简单了。努力了总是会有收获的,越努力越幸运!

转载于:https://www.cnblogs.com/best1/p/6151399.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值