学习笔记-排序

版权声明: https://blog.csdn.net/qq_40860934/article/details/85229183
  • memset用法
    包含cstring
    memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。
    memset(s,0,sizeof(int)*n);

  • malloc用法
    包含cstdlib 动态申请数组

  • 快速排序
    1.设2个“哨兵”i,j ;用temp记录基数
    2.j先走 找到小于基数的 停下
    3.i走 找到大于基数的 停下
    4.i小于j(不相遇 ) 两者数据交换
    5.继续
    6.最后相遇结束 把第一个位置和相遇位置的 交换
    6.内部递归->二分 左边递归 右边递归

void quicksort(int *a,int left,int right)
{
	if(left>right) return;
	int i=left,j=right;
	int temp=a[i];
	while(i<j)
	{
		while(i<j&&a[j]>=temp) j--;
		while(i<j&&a[i]<=temp) i++;
		if(i<j)
		{
			int t=a[j];
			a[j]=a[i];
			a[i]=t;
		}
	}
	a[left]=a[i];   //第一个位置覆盖当前元素
	a[i]=temp;      //当前位置写入基数
	quicksort(a,left,i-1);
	quicksort(a,i+1,right);
}
  • 去重排序
    1.先去重再排序 散列思想 出现过的位置记1 判断输出 O(n+max)
    2.先排序再去重 相同的以及集中在一起了 从第2个位置开始 判断前后元素不同才输出 时间重点在排序算法上

猜你喜欢

转载自blog.csdn.net/qq_40860934/article/details/85229183