简单排序算法

    xiaoxiao2021-03-25  56

    ****简单排序算法****

    总述: 文章将从算法思想,优缺点,关键代码,复杂度方面介绍三个排序算法. 目录: 1,桶排序 2,冒泡排序 3,快速排序 内容: 桶排序 1.1 先将所有的数表示出来,有就对应的桶的位置加1,最后输出的时候直接将有数(一开始将所有的桶初始值设为0)的桶位置的数输出.桶排序在运算之前就已经将所有的数顺序排好了,程序要做的只是看看有没有这个数. 1.2 优点:简单 缺点:1.占用空间大 2.使用有限制,不能统计小数(你不能把小数也表示出来,除非你用个对应的数组表示出来) 1.3代码: (忠告:简洁是代码必须的)

    #include <iostream> using namespace std; #define num 1001 ///**********************浪费空间,并且不能用小数,非要用的话需要一个标记数组8****************** int main(int argc, char *argv[]) { int a[num]; int n; int b; cin>>n; for(int i=num-1;i>=0;i-- )//初始化 { a[i]=0; } for(int i=0;i<n;i++) //桶 { cin>>b; a[b]++; } for(int i=num-1;i>=0;i--) //从大到小输出 { if(a[i]) cout<<i<<" "; } return 0; } 1.4复杂度: 0(N) ******复杂度表示的是程序中运算次数的次冥,不是具体的值。 冒泡排序:

    2.1每次将剩下集合中的最大(或最小)值移到一边,下次使用的集合就不用这个数了,直到集合中没有数为止。 2.2 优点:好像没有 缺点:浪费资源,从复杂度中就可以看出 2.3代码:

    #include <iostream> using namespace std; #define num 1001 ///**********************************算法O(N^2+2*N) ,但复杂度主要看高阶,所以0(N^2) int main(int argc, char *argv[]) { int n; cin>>n; int a[num]; int t; for(int i=0;i<n;i++) { cin>>a[i]; } for(int i =0;i<n-1;i++)//冒泡排序,从大到小 for(int j=i+1;j<n;j++) { if(a[i]<a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } } for(int i=0;i<n;i++) { if(i!=0&a[i]==a[i-1])continue; //去重 cout<<a[i]<<" "; } return 0; }

    2.4复杂度:0(N^2) 快速排序: 3.1二分思想:每次将一列数的头一个数,将整个数列的分为大于和小于这个数的两个数列。之后,用此方法对新得到的两个数列迭代,直到单个数列只有一个数。 3.2优点:资源与速度的结合,总体较好 3.3代码:

    #include <iostream> using namespace std; #define num 1001 //快速排序 int a[num];//定义全局变量主要是因为调用函数和主函数都要用到 void quicksort(int left ,int right) { int i,j,t,temp; if(left>right) return ; temp=a[left];//基准数 i=left; j=right; while(i<j) { while(a[j]>=temp&j>i)//从小到大 j--; while(a[i]<=temp&i<j) i++; //交换**** if(i!=j) { t=a[i]; a[i]=a[j]; a[j]=t; } } a[left]=a[i]; a[i]=temp; //递归*********** quicksort(left,i-1); quicksort(i+1,right); return; } int main(int argc, char *argv[]) { int n; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } quicksort(0,n-1); for(int i=0;i<n;i++) { cout<<a[i]<<" "; } return 0; }

    3.4复杂度: 0(N *log 2N)(平均值,具体怎么算不知道)

    **小结:**还是老了,24岁搞算法真是晚了,最好从初中或高中开始。。。。一把泪。。。。4月8日蓝桥杯。。。一次机会。。。 本文介绍了3个排序算法,快速排序常用,桶排序要知道,冒泡排序哈哈达(几乎不会用到)。。。。 欢迎大家来问问题!

    转载请注明原文地址: https://ju.6miu.com/read-37432.html

    最新回复(0)