linux下练习 c++ 几种排序算法

简介: #include #include #include using namespace std; void sort(int* a,int n)//普通冒泡排序 { bool changed; do { changed...
#include <iostream>
#include<algorithm>
#include<ctime>
using namespace std;
void sort(int* a,int n)//普通冒泡排序
{
	bool changed;
	do
	{
		changed=false;
		for(int i=1;i<n;i++)
		{
			if(a[i]<a[i-1])
			{
				swap(a[i],a[i-1]);
				changed=true;
			}
		}
		--n;
	}
	while(changed);
}
void sort1(int* a,int n)//插入排序
{
	int j;
	for(int i=1;i<n;i++)
	{
		int t=a[i];
		for(j=i;j>0&&t<a[j-1];j--)
			a[j]=a[j-1];
		a[j]=t;
	}
}
void sort2(int* a,int n)//高效冒泡排序
{
	int j;
	for(int i=0;i<n-1;i++)
	{
		int t=i;
		for(j=i+1;j<n;j++)
			if(a[j]<a[t]) t=j;
		if(i!=t) swap(a[t],a[i]);
	}
}
void sort3(int* a,int n)//快速(分组)排序
{
	if(n<=1) return;
	else if(n==2)
	{
		if(a[0]<=a[1]) return;
		else swap(a[0],a[1]);
	}
	else
	{
		swap(a[n/2],a[0]);
		int jie =a[0];
		int* L=a+1;
		int* R=a+n-1;
		while(L<R)
		{
			while(L<R && *L<jie) ++L;
			while(a<R && *R>=jie) --R;
			if(L<R) swap(*L,*R);
		}
		if(*R <jie) swap(*R,a[0]);
		sort(a,R-a);
		sort(R+1,n-1-(R-a));
	}
	
	
}
int main()
{
	const int N=10240;
	int a[N];
	for(int i=0;i<N;i++)
	{
		a[i]=N-i;
	}
	clock_t t1=clock();
	sort(a,N);
	clock_t t2=clock();
	cout<<"用时:"<<double(t2-t1)/CLOCKS_PER_SEC<<endl;
	for(int i=21;i<31;i++)
	{
		cout<<a[i]<<' ';
	}
	cout<<endl;
	//int b[5]={45,42,67,88,11};
	for(int i=0;i<N;i++)//重新赋值
	{
		a[i]=N-i;
	}
	t1=clock();
	sort1(a,N);
	t2=clock();
	cout<<"用时:"<<double(t2-t1)/CLOCKS_PER_SEC<<endl;
	for(int i=21;i<31;i++)
	{
		cout<<a[i]<<' ';
	}
	cout<<endl;
	for(int i=0;i<N;i++)//重新赋值
	{
		a[i]=N-i;
	}
	t1=clock();
	sort2(a,N);
	t2=clock();
	cout<<"用时:"<<double(t2-t1)/CLOCKS_PER_SEC<<endl;
	for(int i=21;i<31;i++)
	{
		cout<<a[i]<<' ';
	}
	cout<<endl;
		for(int i=0;i<N;i++)//重新赋值
	{
		a[i]=N-i;
	}
	t1=clock();
	sort3(a,N);
	t2=clock();
	cout<<"用时:"<<double(t2-t1)/CLOCKS_PER_SEC<<endl;
	for(int i=21;i<31;i++)
	{
		cout<<a[i]<<' ';
	}
	cout<<endl;
}

pkm@pkmlinux:~/files$ g++ sort1.cpp
pkm@pkmlinux:~/files$ a.out
用时:1.06
22 23 24 25 26 27 28 29 30 31
用时:0.49
22 23 24 25 26 27 28 29 30 31
用时:0.47
22 23 24 25 26 27 28 29 30 31
用时:0
22 23 24 25 26 27 28 29 30 31
相关文章
|
1月前
|
网络协议 安全 Linux
Linux C/C++之IO多路复用(select)
这篇文章主要介绍了TCP的三次握手和四次挥手过程,TCP与UDP的区别,以及如何使用select函数实现IO多路复用,包括服务器监听多个客户端连接和简单聊天室场景的应用示例。
89 0
|
1月前
|
存储 Linux C语言
Linux C/C++之IO多路复用(aio)
这篇文章介绍了Linux中IO多路复用技术epoll和异步IO技术aio的区别、执行过程、编程模型以及具体的编程实现方式。
82 1
Linux C/C++之IO多路复用(aio)
|
1月前
|
资源调度 Linux 调度
Linux c/c++之进程基础
这篇文章主要介绍了Linux下C/C++进程的基本概念、组成、模式、运行和状态,以及如何使用系统调用创建和管理进程。
35 0
|
13天前
|
人工智能 算法 大数据
Linux内核中的调度算法演变:从O(1)到CFS的优化之旅###
本文深入探讨了Linux操作系统内核中进程调度算法的发展历程,聚焦于O(1)调度器向完全公平调度器(CFS)的转变。不同于传统摘要对研究背景、方法、结果和结论的概述,本文创新性地采用“技术演进时间线”的形式,简明扼要地勾勒出这一转变背后的关键技术里程碑,旨在为读者提供一个清晰的历史脉络,引领其深入了解Linux调度机制的革新之路。 ###
|
15天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
49 4
|
16天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
1月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
275 3
|
1月前
|
资源调度 Linux 调度
Linux C/C++之线程基础
这篇文章详细介绍了Linux下C/C++线程的基本概念、创建和管理线程的方法,以及线程同步的各种机制,并通过实例代码展示了线程同步技术的应用。
29 0
Linux C/C++之线程基础
|
1月前
|
Linux C++
Linux C/C++之IO多路复用(poll,epoll)
这篇文章详细介绍了Linux下C/C++编程中IO多路复用的两种机制:poll和epoll,包括它们的比较、编程模型、函数原型以及如何使用这些机制实现服务器端和客户端之间的多个连接。
24 0
Linux C/C++之IO多路复用(poll,epoll)
|
1月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
37 0
Linux C/C++之TCP / UDP通信