各种排序算法的实现

来源:互联网 发布:淘宝怎么发布虚拟商品 编辑:程序博客网 时间:2024/04/25 08:34

各种排序算法的C/C++语言实现

排序算法在很多面试中都会涉及到,而且还分为很多种,看得眼花缭乱的,这儿我就先说说几个较简单的算法的实现;
本来是想把各种排序方法写在一个函数里可供选择使用的,但是想着还是把每种算法直观的说清楚最好,故分开实现。
1、插入排序:
插入排序可以联想到玩扑克牌,当你手上有若干张排好序的牌,又拿起一张新的牌,这时候我们的大脑里是怎么想的呢?
假设从右边开始,我们会先和第一张比较,看位置合适不,不合适再和第二张比较,依次比较,直到找到合适的位置,
不过具体到我们这儿的插入排序,有个不同点就是要移动元素的位置。

#include <iostream>using namespace std;#define N 5int main(void){int temp,i,j=0;int a[N]={0};cout<<"请输入"<<N<<"个数"<<endl;while(j<N)cin>>a[j++];for(i=1;i<N;i++)//从第二个数开始比较{for(j=i;j>=0;j--)//把当前位置的数插入到前面已排好数据中{if(a[j]<a[j-1]){temp= a[j];a[j]= a[j-1];a[j-1]= temp;}}}for(i=0;i<N;i++)cout<<a[i]<<" ";cout<<endl;system("pause");return 0;}


2、选择排序:
选择排序就是先以第一个元素为目标,和后面所有的元素比较,如果后面的元素比第一个元素小,就交换位置(这样可以保证第一个元素是最小的),一趟比较下来,第一个元素自然就是最小的,再比较第二趟,不过是从第二个元素开始了,直到比较到最后两个。
#include <iostream>using namespace std;#define N 5int main(void){int temp,i,j=0;int a[N]={0};cout<<"请输入"<<N<<"个数"<<endl;while(j<N)cin>>a[j++];for(i=0;i<N;i++){for(j=i+1;j<N;j++){if(a[i]>a[j]){temp= a[i];a[i]= a[j];a[j]= temp;}}}for(i=0;i<N;i++)cout<<a[i]<<" ";cout<<endl;system("pause");return 0;}


3、快速排序:
4、冒泡排序:
冒泡排序就是从第一个数开始,两两比较,把大的交换到后面,这样一趟比较下来,最大的数就冒到最后一个位置上去了;在比较第二趟,不过这次要排除最后一个元素,以此类推,这个还是很好理解的。
#include <iostream>using namespace std;#define N 5int main(void){int temp,i,j=0;int flag_down   =0;//排序完成的标志int a[N]={0};cout<<"请输入"<<N<<"个数"<<endl;while(j<N)cin>>a[j++];for(i=0;i<N;i++){for(j=0;j<N-i-1;j++){flag_down= 1;if(a[j]>a[j+1]){temp= a[j];a[j]= a[j+1];a[j+1]= temp;flag_down= 0;}}//对冒泡的一个小小改进,当一趟比较都没有发生数据交换时,//说明排序已经完成if(flag_down)break;}for(i=0;i<N;i++)cout<<a[i]<<" ";cout<<endl;system("pause");return 0;}


5、二分排序:
0 0
原创粉丝点击