学习笔记----数据排序

STL

  • sort

用于C++中,对给定区间所有元素进行排序。头文件是#include “algorithm”
如果有需要可以定义排序函数。

  • set
    set的特性是,所有元素都会根据元素的键值自动排序。
    begin()    返回set容器的第一个元素的 地址
    end()      返回set容器的最后一个元素 地址
    empty()     判断set容器是否为空
    size()      返回当前set容器中的元素个数
    erase(it) 删除迭代器指针it处元素
    insert(a) 插入某个元素
  • unique

unique就是把数组伪去重,重复的数放在数组末,(听说是把不重复的放前面?)
使用它时一般是排好序了的,放回去重后的放重复元素的第一个迭代器。所以减去首元素就是它的不重复的元素的长度

unique(a,a+n)-a;

算法

  • Bubble Sort
    主要思想是通过单向的有序性来确定整体的有序性:总共有 数据个数-1 轮循环,每次循环把最值维护。其实就是相当于插入排序吧。
for(i=0;i<n;++i)
	for(j=i;j<n;++j)
	{
		if(a[j]<a[i])
		{
		temp=a[i];
		a[i]=a[j];
		a[j]=temp;
	}
	}
  • Quicksort

其实就是一种分治的思想,通过由整体到局部的有序性,自内而外地形成有序性。

inline int qsort(int l,int r)
{
	int mid=a[(l+r)>>1],i=l,j=r,t;
	do
	{
		while(a[i]<mid) ++i;
		while(a[j]>mid) --j;
		if(i<=j)
		{
			t=a[i];
			a[i]=a[j];
			a[j]=t;
			++i;--j;
		}
	}while(i<=j);
	if(l<j) qsort(l,j);
	if(i<r) qsort(i,r);
}
  • merge sort
    也是分治的思想,就是通过recursion把它切到最小,然后进行合并。
inline void merge_sort(int *a,int x,int y,int *t)
{
	if(y-x>1)
	{
		int m=x+(y-x)/2;
		int p=x,q=m,i=x;
		merge_sort(a,x,m,t);
		merge_sort(a,m,y,t);
		while(p<m || q<y)
		{
			if(q>=y || (p<m && a[p]<=a[q])) t[i++]=a[p++];
			else t[i++]=a[q++];
		}
		for(i=x;i<y;i++) a[i]=t[i];
	}
}
  • 二分

STL中有两个函数,分别是从小到大、从大到小,返回下标第一个大于或等于finds的下标

int ans=upper_bound(a,a+i,finds)-a;
int ans=lower_bound(a,a+i,finds)-a;

猜你喜欢

转载自blog.csdn.net/qq_42821215/article/details/83215084