zoukankan      html  css  js  c++  java
  • 排序算法初探

    发现自己根本不会写排序,于是去复习了几个排序算法...

    最坏O(n^2)的算法

    冒泡排序

    维护一个形如[无序区,有序区]的序列,每次通过交换相邻元素,把无序区里最大的元素移到有序区的前端。

    选择排序

    维护一个形如[有序区,无序区]的序列,每次从无序区里选择出最小的元素,放到有序区的后面。

    插入排序

    维护一个形如[有序区,无序区]的序列,每次把无序区里的第一个元素插入到有序区里合适的位置。

    快速排序

    随机选一个元素,将比该元素小的元素移到它的前面,比它大的移到后面。再对前后两个区间递归进行相同操作。对于随机数据,算法效率似乎甚至优于归并排序。同时代码实现时可以使用简洁但不好理解的swap两个元素的方法。

    #include<bits/stdc++.h>
    using namespace std;
    const int SIZE=100005;
    
    #define Mid ((L+R)>>1)
    void Quick_Sort(int L,int R,int A[])
    {
    	if(R<=L)return;
    	int Flag=A[(L+R)/2],p=L,q=R;
    	while(p<=q)
    	{
    		while(A[p]<Flag)p++;
    		while(A[q]>Flag)q--;
    		if(p<=q)swap(A[p++],A[q--]);
    	}
    	Quick_Sort(L,q,A);
    	Quick_Sort(p,R,A);
    }
    
    int main()
    {
    	int n,A[SIZE];
    	cin>>n;
    	for(int i=1;i<=n;i++)cin>>A[i];
    	Quick_Sort(1,n,A);
    	for(int i=1;i<=n;i++)cout<<A[i]<<" ";
    	return 0;
    }
    

    其他比较有意思的算法

    归并排序

    时间复杂度为稳定的 (O(nlog n))

    #include<bits/stdc++.h>
    using namespace std;
    const int SIZE=100005;
    
    #define Mid ((L+R)>>1)
    void Merge_Sort(int L,int R,int A[],int Tem[])
    {
    	if(L==R)return;
    	Merge_Sort(L,Mid,A,Tem);
    	Merge_Sort(Mid+1,R,A,Tem);
    	int i=L,j=Mid+1,k=L-1;
    	while(i<=Mid&&j<=R)
    	{
    		if(A[i]<=A[j]) Tem[++k]=A[i++];
    		else Tem[++k]=A[j++];
    	}
    	while(i<=Mid)Tem[++k]=A[i++];
    	while(j<=R)Tem[++k]=A[j++];
    	for(i=L;i<=R;i++)A[i]=Tem[i];
    }
    
    int main()
    {
    	int n,A[SIZE],Tem[SIZE];
    	cin>>n;
    	for(int i=1;i<=n;i++) cin>>A[i];
    	Merge_Sort(1,n,A,Tem);
    	for(int i=1;i<=n;i++)cout<<A[i]<<" ";
    	return 0;
    }
    

    桶排序

    好像也很有意思。

  • 相关阅读:
    AMF序列化技巧
    为什么用ByteArray序列化的对象如此小?
    解决Asp.net中翻页问题的自定义用户控件
    新建对象:反射会调用构造函数,clone不会调用构造函数
    Java 的传值小例子
    JDK中设计模式
    tryfinally中的返回值
    c++类中的常量(注意)
    创建有个性的对话框之MFC篇(转)
    用VC在IE浏览器的工具条上添加命令按钮(转 可以借鉴)
  • 原文地址:https://www.cnblogs.com/TaylorSwift13/p/15530410.html
Copyright © 2011-2022 走看看