zoukankan      html  css  js  c++  java
  • 编程珠玑---读书笔记---第11章排序

    插入排序:

    对于小型的排序任务速度很快,它是稳定的,只需要O(1)的额外空间,基于比较和交换的次数为O(n^2)。

    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <cmath>
    #include <vector>
    #include <algorithm>
    #include <sstream>
    #include <cstdlib>
    #include <fstream>
    #include <queue>
    using namespace std;
    int x[8]={55,41,59,26,53,58,97,93};
    int main()
    {
    	//ifstream fin;
    	//fin.open("data1.txt");
    	for(int i=1;i<8;i++)
    		for(int j=i;j>0 && x[j]<x[j-1];j-- )
    		{
    			int t=x[j];
    			x[j]=x[j-1];
    			x[j-1]=t;
    		}
    	for(int i=0;i<8;i++)cout<<x[i]<<" ";
    	cout<<endl;
    	
    	return 0;
    
    }
    
     


    快速排序:

    如果n很大,快速排序的O(n*logn)的运行时间就很关键了,在结合随机划分和双向划分后,对于任意的n元输入数组,快排的期望运行时间正比于 n logn。

    下面代码的版本是基于第一个元素进行划分,对于随机输入的数据这是没有问题的,但是对于某些常见输入,比如数组已基本有序,那么最坏情况下需要

    O(n^2)的时间,这时候,我们可以才用随机划分元素的方法,可以改善性能,通过把第一个元素和后面所有元素中的一个随机项交换来实现这一点:

    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <cmath>
    #include <vector>
    #include <algorithm>
    #include <sstream>
    #include <cstdlib>
    #include <fstream>
    #include <queue>
    using namespace std;
    int x[8]={55,41,59,26,53,58,97,93};
    void qsort1(int l,int u)
    {
    	if(l>=u)return;
    	int m=l;
    	for(int i=l+1;i<=u;i++)
    	{
    		if(x[i]<x[l]){
    			m++;
    			int t=x[m];
    			x[m]=x[i];
    			x[i]=t;
    		}
    	}
    	int t=x[l];
    	x[l]=x[m];
    	x[m]=t;
    	qsort1(l,m-1);
    	qsort1(m+1,u);
    	
    }
    int main()
    {
    	qsort1(0,7);
    	
    	for(int i=0;i<8;i++)cout<<x[i]<<" ";
    	cout<<endl;
    	
    	return 0;
    
    }
    
     


    顺便说一下:C库函数qsort非常简单相对较快,但是它比我们自己写的快排慢,仅仅是因为其通用而灵活的接口对每次比较都使用函数调用,C++库函数sort具有最简单的

    接口:我们通过调用sort(x,x+n)来对数组x排序,实现也很高效。

  • 相关阅读:
    UDP和TCP是网络通讯
    HTTPS
    Kubernetes Ingress API Ingress资源通过允许API网关样式的流量路由
    30条黄金法则
    工作流
    开发注意H5移动端
    Wireshark TCP
    关于dotnet跨平台 和 移动开发&人工智能 微信公众号
    超燃| 2019 中国.NET 开发者峰会视频发布
    免费下载 80多种的微软推出入门级 .NET视频
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3153162.html
Copyright © 2011-2022 走看看