您的位置:首页 > 运维架构 > Apache

linux下安装apache详解

2013-04-21 12:01 274 查看
今天想说的是“选择排序方法

先从字面意思解释一下:每次从未排序的数据中选出一个,并按出来的顺序排序得到就是有序的序列了。至于选择的方法无非就是两种:选最大值和选最小值。下面只以选择最大值为例说明。
仍然以图来说明算法的流程:



图里面给出了两种方法来进行排序,(1)、保留原始内存的方法(排序结果保存在原来的内存)。(2)、重新开辟新内存的方法(排序后原始内存数据保持不变,但是在新内存中保存排序结果)。
有人可能有疑问这和冒泡排序有什么不同呢,确实猛一看效果是一样的,都是在一次排序后最大值都出现在数组最后,但是请大家对比一下上图中第一次选择后的数据和上篇(冒泡排序)的图片中第一次冒泡后的数据的顺序。可以发现除了最大值的位置一样,其他位置的数据是有不同的。造成这种现象就是选择排序算法和冒泡排序算法不同导致。以图为证冒泡过程分解图


选择排序流程图分解:
对比上面的两幅图,应该很清楚地说明了选择排序和冒泡排序的不同了吧!


代码实现:
一、不重新分配内存的方法实现#include<stdio.h>#include<stdlib.h>
#define NUM 100int sort_data[NUM];
void swap(int*a,int *b);voidsel_sort(int *data,int num);

int main(void){ int i; for(i=0;i<NUM;i++) { sort_data[i]=rand(); } sel_sort(sort_data,NUM); return 0;}
void swap(int*a,int *b){ int temp; temp=a[0]; a[0]=b[0]; b[0]=temp;}
voidsel_sort(int *data,int num){ int i,j; int index;//最大值的索引值 int temp;//保存最大值数值 if(num==1) { return; } for(i=1;i<=num-1;i++)//进行num-1次即可完成排序 { temp=data[0]; index=0; for(j=1;j<=num-i;j++) { if(data[j]>temp)//更新最大值及其索引值 { temp=data[j]; index=j; } } swap(&data[index],&data[num-i]);//将最大值放在搬移到未排序数据的最后位置 }}
二、重新分配的方法
#include<stdio.h>#include<stdlib.h>
#define NUM 10intsort_data[NUM];
int*sel_sort(int *data,int num);

int main(void){ int i; int *sorted_data=NULL; for(i=0;i<NUM;i++) { sort_data[i]=rand(); } sorted_data=sel_sort(sort_data,NUM); for(i=0;i<NUM;i++) { printf("%d\n",sorted_data[i]); } free(sorted_data); sorted_data=NULL; return 0;}int*sel_sort(int *data,int num){ int i,j; int temp;//保存最大值数值 int index;//最大值的索引值 int *sort_out;//待输出的排好序数据 int *flag;//标记是否已被选择 if(num<1) { return NULL; } sort_out=(int*)malloc(sizeof(int)*num);//分配内存 flag=(int *)calloc(num,sizeof(int));//分配内存并初始化 if(num==1) { sort_out[0]=data[0]; return sort_out; } for(i=1;i<=num;i++)//进行num次即可完成排序 { temp=-1000;//该值可以根据实际情况选择,rand产生数据均大于0 index=-1; for(j=0;j<num;j++) { if(flag[j]!=1 &&data[j]>temp)//更新最大值及其索引值 { temp=data[j]; index=j; } } sort_out[num-i]=temp; flag[index]=1; } free(flag); flag=NULL; return sort_out;}调试结果





本文出自 “大叔” 博客,请务必保留此出处http://zjd1988.blog.51cto.com/2180707/1339755
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: