锁定老帖子 主题:各种经典排序算法总结
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-29
不错的文章,此站难得啊,辛苦lz了
|
|
返回顶楼 | |
发表时间:2011-10-31
楼主辛苦了,收下看看
|
|
返回顶楼 | |
发表时间:2011-11-01
受益匪浅。
|
|
返回顶楼 | |
发表时间:2011-11-02
感谢分享啊!!!
|
|
返回顶楼 | |
发表时间:2011-11-02
最后修改:2011-11-02
第一篇文里的
void simpleSelectionSort1(int *a,int n) 由于C中数组下标从0开始 两个for是不是应该改成 //1.进行n-1趟选择,每次选出第i小记录 for(i=0;i<n-1;i++){ //2.选择第i小记录为a[index] for(j=i+1;j<n;j++) #include<stdio.h> void simpleSelectionSort1(int *a,int n) { int i,j,index; //1.进行n-1趟选择,每次选出第i小记录 for(i=0;i<n-1;i++){ index=i; //2.选择第i小记录为a[index] for(j=i+1;j<n;j++) if(a[j]<a[index]) index=j; //3.与第i个记录交换 if(index!=i){ a[i]=a[i]+a[index]; a[index]=a[i]-a[index]; a[i]=a[i]-a[index]; } } } int main() { int a[]={4,3,1,2}; simpleSelectionSort1(a,4); for(int i=0;i<4;i++) { printf("%d\t",a[i]); } return 0; } ========== 后面的 void simpleSelectionSort2(int *a,int n) 类似 #include<stdio.h> void simpleSelectionSort1(int *a,int n) { int i,j,index; //1.进行n-1趟选择,每次选出第i小记录 for(i=0;i<n-1;i++){ index=i; //2.选择第i小记录为a[index] for(j=i+1;j<n;j++) if(a[j]<a[index]) index=j; //3.与第i个记录交换 if(index!=i){ a[i]=a[i]+a[index]; a[index]=a[i]-a[index]; a[i]=a[i]-a[index]; } } } void simpleSelectionSort2(int *a,int n) { int index,i; if(n==1) return; //1.选择待排序序列a中的最小记录,其下标为index for(index=i=0;i<n;i++){ if(a[i]<a[index]) index=i; } //2.最小记录与待排序序列首元素进行交换 if(index!=1){ a[1]=a[1]+a[index]; a[index]=a[1]-a[index]; a[1]=a[1]-a[index]; } //3.待排序序列元素个数减少,递归对剩下的无序序列排序 simpleSelectionSort2(a+1,n-1); } int main() { int a[]={4,3,1,2}; simpleSelectionSort2(a,4); for(int i=0;i<4;i++) { printf("%d\t",a[i]); } return 0; } |
|
返回顶楼 | |
发表时间:2011-11-02
ddkk 写道 第一篇文里的
void simpleSelectionSort1(int *a,int n) 由于C中数组下标从0开始 两个for是不是应该改成 //1.进行n-1趟选择,每次选出第i小记录 for(i=0;i<n-1;i++){ //2.选择第i小记录为a[index] for(j=i+1;j<n;j++) #include<stdio.h> void simpleSelectionSort1(int *a,int n) { int i,j,index; //1.进行n-1趟选择,每次选出第i小记录 for(i=0;i<n-1;i++){ index=i; //2.选择第i小记录为a[index] for(j=i+1;j<n;j++) if(a[j]<a[index]) index=j; //3.与第i个记录交换 if(index!=i){ a[i]=a[i]+a[index]; a[index]=a[i]-a[index]; a[i]=a[i]-a[index]; } } } int main() { int a[]={4,3,1,2}; simpleSelectionSort1(a,4); for(int i=0;i<4;i++) { printf("%d\t",a[i]); } return 0; } ========== 后面的 void simpleSelectionSort2(int *a,int n) 类似 #include<stdio.h> void simpleSelectionSort1(int *a,int n) { int i,j,index; //1.进行n-1趟选择,每次选出第i小记录 for(i=0;i<n-1;i++){ index=i; //2.选择第i小记录为a[index] for(j=i+1;j<n;j++) if(a[j]<a[index]) index=j; //3.与第i个记录交换 if(index!=i){ a[i]=a[i]+a[index]; a[index]=a[i]-a[index]; a[i]=a[i]-a[index]; } } } void simpleSelectionSort2(int *a,int n) { int index,i; if(n==1) return; //1.选择待排序序列a中的最小记录,其下标为index for(index=i=0;i<n;i++){ if(a[i]<a[index]) index=i; } //2.最小记录与待排序序列首元素进行交换 if(index!=1){ a[1]=a[1]+a[index]; a[index]=a[1]-a[index]; a[1]=a[1]-a[index]; } //3.待排序序列元素个数减少,递归对剩下的无序序列排序 simpleSelectionSort2(a+1,n-1); } int main() { int a[]={4,3,1,2}; simpleSelectionSort2(a,4); for(int i=0;i<4;i++) { printf("%d\t",a[i]); } return 0; } 文章开头有注明的 注:为了叙述方便,本文以及源代码中均不考虑A[0],默认下标从1开始。 |
|
返回顶楼 | |
发表时间:2011-11-02
Touch_2011 写道 ddkk 写道 第一篇文里的
void simpleSelectionSort1(int *a,int n) 由于C中数组下标从0开始 两个for是不是应该改成 //1.进行n-1趟选择,每次选出第i小记录 for(i=0;i<n-1;i++){ //2.选择第i小记录为a[index] for(j=i+1;j<n;j++) #include<stdio.h> void simpleSelectionSort1(int *a,int n) { int i,j,index; //1.进行n-1趟选择,每次选出第i小记录 for(i=0;i<n-1;i++){ index=i; //2.选择第i小记录为a[index] for(j=i+1;j<n;j++) if(a[j]<a[index]) index=j; //3.与第i个记录交换 if(index!=i){ a[i]=a[i]+a[index]; a[index]=a[i]-a[index]; a[i]=a[i]-a[index]; } } } int main() { int a[]={4,3,1,2}; simpleSelectionSort1(a,4); for(int i=0;i<4;i++) { printf("%d\t",a[i]); } return 0; } ========== 后面的 void simpleSelectionSort2(int *a,int n) 类似 #include<stdio.h> void simpleSelectionSort1(int *a,int n) { int i,j,index; //1.进行n-1趟选择,每次选出第i小记录 for(i=0;i<n-1;i++){ index=i; //2.选择第i小记录为a[index] for(j=i+1;j<n;j++) if(a[j]<a[index]) index=j; //3.与第i个记录交换 if(index!=i){ a[i]=a[i]+a[index]; a[index]=a[i]-a[index]; a[i]=a[i]-a[index]; } } } void simpleSelectionSort2(int *a,int n) { int index,i; if(n==1) return; //1.选择待排序序列a中的最小记录,其下标为index for(index=i=0;i<n;i++){ if(a[i]<a[index]) index=i; } //2.最小记录与待排序序列首元素进行交换 if(index!=1){ a[1]=a[1]+a[index]; a[index]=a[1]-a[index]; a[1]=a[1]-a[index]; } //3.待排序序列元素个数减少,递归对剩下的无序序列排序 simpleSelectionSort2(a+1,n-1); } int main() { int a[]={4,3,1,2}; simpleSelectionSort2(a,4); for(int i=0;i<4;i++) { printf("%d\t",a[i]); } return 0; } 文章开头有注明的 注:为了叙述方便,本文以及源代码中均不考虑A[0],默认下标从1开始。 接受指正,惯性思维了,LZ是正确的 |
|
返回顶楼 | |
发表时间:2011-11-02
最后修改:2011-11-02
算法讲求的是思想,不是实现。有了思想,不管是哪种语言,都无优劣之分。
|
|
返回顶楼 | |
发表时间:2011-11-03
哇,好东西,有时间看一下
|
|
返回顶楼 | |
发表时间:2011-11-07
楼主辛苦了 有时间再好好学习一下
|
|
返回顶楼 | |