排序算法总结
下面总结几个常用排序算法(因为现在在学C++,所以下面都是C++的代码,但其实C的代码跟这个差不多)
1.简化版桶排序
#include <iostream> using namespace std; #define N 5 //有N个数 #define M 10 //取值是0—M int main() { int i,j; int a[M]; for (i=0;i<M;i++) { a[i]=0; //每一个都出现了0次 } for (j=0;j<N;j++) { int t; cin>>t; a[t]++; } for (i=0;i<M;i++) { for (j=1;j<=a[i];j++) { cout<<i<<" "; } } return 0; }
2.冒泡排序
敲一遍才知道之前学C 的时候学的这个冒泡排序好不扎实,有好多细节都没理解!!
再次更新:理解理解理解!太重要了!当时学C语言时感觉这些算法已经滚瓜烂熟,但是完完全全地自己写一遍还是有一些问题!
注意:
关于两个循环:
1.首先是有n个数,所以第一个循环需要遍历n-1次(为什么不是n次呢?因为做完n-1个数字的排序后,最后一个数字的顺序也确定了)
2.第二次循环:i的含义代表已经有i个数字归位了,那么剩下的数字需要再比较n-i-1次
下面是正确的C++代码,局限是我已经指定了数组的大小
#include <iostream> using namespace std; int main() { int i,j; int n=10; int a[10]; for (i=0;i<n;i++) { cin>>a[i]; } for (i=0;i<n-1;i++) //进行n-1次排序 { for (j=0;j<n-i;j++) //注意:每一次归位一个数,那么每次再循环的时候就可以少冒泡一次 { if (a[j]<a[j+1]) { int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for (i=0;i<n;i++) { cout<<a[i]<<"\n"; } return 0; }
如果想要指定数组大小,很简单,创建一个动态数组就行:
#include <iostream> using namespace std; int main() { int i,j; int n; cin>>n; //输入数组大小 int* a; a=new int[n]; //创建一个动态数组,长度为n for (i=0;i<n;i++) { cin>>a[i]; } for (i=0;i<n-1;i++) //进行n-1次排序 { for (j=0;j<n-1-i;j++) //注意:每一次归位一个数,那么每次再循环的时候就可以少冒泡一次 { if (a[j]<a[j+1]) { int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for (i=0;i<n;i++) { cout<<a[i]<<"\n"; } return 0; }
先写到这!学了新的再更新
本文来自博客园,作者:EowynTang,转载请注明原文链接:https://www.cnblogs.com/tangcoder/p/15591691.html

浙公网安备 33010602011771号