那些年,我们一起玩过的排序之交换排序!

jackson_fighting 2012-08-24 01:53:40
上一篇帖子是关于插入排序
http://topic.csdn.net/u/20120820/18/c3f618eb-604b-48be-b3e2-ac09c90d2df2.html
不过没人看!
现在发下交换排序
交换排序的基本思想,两两比较待排序记录的关键字,若发现两个记录的次序为逆序时,交换其存储位置,知道没有逆序为止。
首先介绍冒泡排序
基本思想:对所有相邻记录的关键字值进行比较,如果是逆序,则交换其位置,经过多趟排序,最终使整个序列有序。

#include<stdio.h>
#define LENGTH 8
main(){
int r[LENGTH] = {42,36,56,78,67,11,27,36};
int i,j,temp,mark;
for(i=1;i<LENGTH-1;i++){/*控制共进行LENGTH-1趟排序*/
mark = 0;
for(j=0;j<LENGTH-i;j++){/*进行第i趟排序*/
if(r[j]>r[j+1]){
temp = r[j];
r[j]= r[j+1];
r[j+1] = temp;
}
}
if(mark==0)
break;
}
for(i=0;i<LENGTH;i++)
printf("%d ",r[i]);
printf("\n");

}


2:快速排序
是对冒泡排序的一种改进,她的基本思想是:通过一趟排序将待排序记录划分为两部分,使得其中一部分记录关键字比另一部分记录的关键字小,然后再分别对这两部分记录进行排序,直到每个部分为空或只包含一个记录时排序结束。


#include<stdio.h>
int Partition(int r[],int s,int t){
int i,j,rp;
i = s;/*i开始位置*/
j=t;/*j结束位置*/
rp = r[s];/*基准记录暂存rp*/
while(i<j){
while(i<j&&r[j]>=rp)
j--;/*扫描比基准记录小的位置*/
r[i] = r[j];/*将比记录小的记录移到低端*/
while(i<j&&r[i]<=rp)
i++;/*扫描比基准记录大的位置*/
r[j] = r[i];
}
r[i] = rp;
return i;
}
void Qsort(int r[],int s,int t)/*快速排序算法*/
{
int k;
if(s<t){
k = Partition(r,s,t);/*调用一段快速排序算法将r[s]...r[t]一分为二*/
Qsort(r,s,k-1);/*低端子序列递归排序,k是支点位置*/
Qsort(r,k+1,t);/*高端子序列排序*/
}
}

#define LENGTH 8
main(){
int i;
int r[LENGTH] = {42,36,56,78,67,11,27,36};
Qsort(r,0,LENGTH-1);
for(i = 0;i<LENGTH;i++)
printf("%d ",r[i]);
}


后面会有选择排序.
...全文
461 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小新蜡笔 2012-12-07
  • 打赏
  • 举报
回复
有没有交换存储地址的方法?
jackson_fighting 2012-08-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

全是c的呀,没有java的
[/Quote]

主要是了解思想嘛!
ldhbq2014 2012-08-26
  • 打赏
  • 举报
回复
全是c的呀,没有java的
jackson_fighting 2012-08-25
  • 打赏
  • 举报
回复
为什么我发的帖子一楼都被删掉了?

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧