三路快排(基于三指针单趟排序的快速排序)+快排时间复杂度再分析

18 篇文章 6 订阅
订阅专栏

目录

 一.前言

二. 三路快排

😍算法思想:

😍算法实现步骤:

😍三指针单趟排序的实现:​

😍非递归快排完全体:

🤔与C标准库里的快排进行对比测试:

三.快排时间复杂度再分析


 一.前言

http://t.csdn.cn/mz8dghttp://t.csdn.cn/mz8dg http://t.csdn.cn/1TqDphttp://t.csdn.cn/1TqDp

  • 😄关于快排的基本思想和实现及其优化
  • 😄利用双指针单趟排序实现的快速排序有一个无法避免的缺陷:当待排序序列中有大量(或全部)元素相同时,快排的时间复杂度会升阶为O(N^2),此时快排的递归树线型结构,递归的深度为O(N),时间消耗空间消耗都非常巨大:
  • 😄为了避免这种情况出现,就需要重新设计一下快排的单趟排序,目的在于:当待排序序列中存在大量相同元素时,减小快排递归树的深度

二. 三路快排

😍算法思想:

  • 🤪三路快排的单趟排序是利用三指针算法来实现的
  • 🤪其基本思想是利用三个指针将数组从左到右划分为三个部分,第一部分中所有元素都比key小,第二部分中所有元素都等于key,第三部分中所有元素都大于key
  • 🤪后续就可以对数组第一部分和第三部分进行分治,数组的第二部分所有元素已经处于它们在有序序列中的最终位置,无须再进行处理
  • 🤪三路快排的边界条件有点折磨人​​

😍算法实现步骤:

  • 🤪三个指针的初始位置如图所示
  • 🤪left是待排序区间的左边界,right是待排序区间的右边界,待排序区间闭区间
  • 🤪算法实现思路:
  • 🤪利用midi指针遍历待排序序列,遍历限制条件为:midi<greater.
  1. 😝若arr[midi]比key大,令grater指针减一,并将arr[midi]交换到[greater,right]区间中,midi指针不动
  2. 😝若arr[midi]比key小,令small指针加一, 并将arr[midi]交换到[left+1,small]区间中,midi指针向前走一步
  3. 😝若arr[midi]与key相同,midi指针向前走一步,其余指针不动,目的是将等于key元素的arr[midi]"括入"[small+1,midi)区间
  • 😝重复上述过程直到midi指针和geater指针相遇,算法gif:
  • 😝经过上述过程,最终[left+1,small]区间中的所有元素一定比key小,[greater,right]区间中的所有元素一定比key大,[small+1,midi)区间中的所有元素一定等于key:
  • 😝同时注意,迭代过程结束后,small最终指向的元素一定小于key,所以最后一步就是将arr[small]和arr[left]进行交换,于是数组就被划分成了三个部分:
  • 😝接下来就可以对区间[left,small-1]区间[greater,right]进行分治形成递归完成快速排序

😍三指针单趟排序的实现:

void QuickSort(int* arr, int left, int right)
{
	assert(arr);
	int key = left;
	int midi = left + 1;
	int small = left;
	int greater = right + 1;
	while (midi < greater)
	{
		if (arr[midi] < arr[key])	   //将arr[midi]交换到[left + 1, small]区间中,同时注意small位置的元素一定比key元素小
		{
			++small;
			if (small != midi)
			{
				swap(&arr[small], &arr[midi]);
			}
			++midi;
		}
		else if (arr[midi] > arr[key]) //将arr[midi]交换到[greater,right]区间
		{
			--greater;
			swap(&arr[midi], &arr[greater]);
		}
		else
		{
			++midi;					   //将等于key元素的arr[midi]"括入"[small+1,midi)区间中
		}
	}
	swap(&arr[small], &arr[key]);      //small最终指向的元素一定小于key
}

接下来再进行分治递归并给出递归出口完成快速排序:

😍非递归快排完全体:

  • 😝同时辅以三数取中优化
    void swap(int* e1, int* e2)
    {
    	assert(e1 && e2);
    	int tem = *e1;
    	*e1 = *e2;
    	*e2 = tem;
    }
    
    //三数取中优化
    int GetMid(int* arr,int left,int right)
    {
    	int mid = left + ((right - left) >> 2);     //在arr[left],arr[mid],arr[right]三者中取中间值作为key,返回key的下标
    	if (arr[left] < arr[right])
    	{
    		if (arr[left] < arr[mid] && arr[mid] < arr[right])
    		{
    			return mid;
    		}
    		else if (arr[mid] > arr[right])
    		{
    			return right;
    		}
    		else
    		{
    			return left;
    		}
    	}
    	else
    	{
    		if (arr[left] > arr[mid] && arr[mid] > arr[right])
    		{
    			return mid;
    		}
    		else if (arr[mid] > arr[left])
    		{
    			return left;
    		}
    		else
    		{
    			return right;
    		}
    	}
    }
    void QuickSort(int* arr, int left, int right)
    {
    	if (left >= right)                 //递归出口
    	{
    		return;
    	}
    	assert(arr);
    	int key = left;
        swap(&arr[left], &arr[GetMid(arr, left, right)]);
    	int midi = left + 1;
    	int small = left;
    	int greater = right + 1;
    	while (midi < greater)
    	{
    		if (arr[midi] < arr[key])	   //将arr[midi]交换到[left + 1, small]区间中,同时注意small位置的元素一定比key元素小
    		{
    			++small;
    			if (small != midi)
    			{
    				swap(&arr[small], &arr[midi]);
    			}
    			++midi;
    		}
    		else if (arr[midi] > arr[key]) //将arr[midi]交换到[greater,right]区间
    		{
    			--greater;
    			swap(&arr[midi], &arr[greater]);
    		}
    		else
    		{
    			++midi;					   //将等于key元素的arr[midi]"括入"[small+1,midi)区间中
    		}
    	}
    	//small指向的元素一定小于key
    	swap(&arr[small], &arr[key]);      //将key交换到其应该出现的最终位置
    	QuickSort(arr, left, small - 1);   //分治左子数组
    	QuickSort(arr, midi,right);		   //分治右子数组
    }
  • 🤔经过三数取中三指针优化后的快排就可以对任意序列进行高效排序,不会再出现时间复杂度升阶为O(N^2)的情况

  • 🤔力扣排序测试:(该测试非常针对未经优化和非三指针的快排) 912. 排序数组 - 力扣(Leetcode)https://leetcode.cn/problems/sort-an-array/description/

🤔与C标准库里的快排进行对比测试:

int main()
{
    srand((unsigned int)time(0));
	const int N = 10000000;
	int* arr1 = (int*)malloc(sizeof(int) * N);
	int* arr2 = (int*)malloc(sizeof(int) * N);
	int* arr3 = (int*)malloc(sizeof(int) * N);
	for (int i = 0; i < N; ++i)
	{
		arr1[i] = rand();
		arr2[i] = arr1[i];
		arr3[i] = arr1[i];
	}

	int begin2 = clock();
	qsort(arr2, N, sizeof(int), cmp);
	int end2 = clock();
	printf("qsort:%d\n", end2 - begin2);

	int begin3 = clock();
	QuickSort(arr3, 0,N-1);
	int end3 = clock();
	printf("QuickSort:%d\n", end3 - begin3);
    
    free(arr1);
    free(arr2);
    free(arr3);
}

  • 🤔有点奇怪的是在我的机器环境中,我自己写的快排比标准库里的快排还要快一倍左右(可执行程序为release版本) 

三.快排时间复杂度再分析

  • 😍设N为待排序序列元素个数
  • 😍以下分析中的log都表示以2为底的对数
  • 😍经过三数取中三指针优化后的快排分治递归递归树可以认为在处理任何序列时都接近一颗满二叉树:(注意数组的分割点不参与后续的单趟排序)
  • 😍从递归树第一层开始,递归树每一层所有单趟排序所需遍历元素总个数依次为:N+(N-1)+(N-3)+(N-7)......即快排的时间复杂度计算公式为:
  • 😍将上述复杂度公式进行求和运算,取b = logN可得:
  • 😍再化简可得:
  • 😍可见快速排序时间复杂度O(NlogN)的基础上存在进一步的微收敛,这使得快速排序在四个时间复杂度数量级O(NlogN)的排序算法中独占鳌头进而成为工业级排序中用的最多的排序算法。(四个时间复杂度为O(NlogN)数量级的排序算法分别为:希尔排序,堆排序,归并排序和快速排序)

 

java快速排序时间复杂度_程序猿必备排序算法及其时间复杂度分析
weixin_35152781的博客
02-28 1141
常用的时间复杂度常数阶\(O(1)\)说明: 只要代码中没有复杂的循环条件,无论代码的函数是多少,一律为常数阶\(O(1)\)int i=1;int j=3;int m=0;m=i+j;....对数阶 \(O(log_2n)\)说明: 存在循环体,在不考虑循环体的代码执行情况,该循环体本该执行n次,但是循环体将改变循环变量i的大小,每执行一次,i就扩到两倍,即i=i*2,这样就导致循环体会加速趋近...
冒泡和快速排序时间复杂度_java 八大排序算法 冒泡排序 快速排序排序 归并排序 等...
weixin_39602579的博客
11-22 1842
八大排序算法一、直接插入1.基本思路在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。2.代码实现1.遍历数组,每次循环从第二个数字往前插入2.设定插入数和得到已经排好序列的最后一个数的位数。temp和j=i-1。3.从最后一个数开始向前循环,如果插入数小于当前...
三路快速排序算法(qickSort3Ways)
05-20
基于c++ 11 的三路快速排序算法(qickSort3Ways),源码+实例
排序算法----三路快速排序
NancyLCL的博客
02-10 1865
1. 快速排序快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比一部分的关键字小,比另一部分的关键字大,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 2. 三路快速排序的时间,空间复杂度及稳定性: 1>. 时间复杂度:O(nlogn);因为我们这里三路快速排序的过程中向下递归分割数组的过程时间复杂度为:O(logn);我们在划分数组部分的时候还要遍历数组,时间复杂度为:O(n);因此三路快速排序时间复杂度为:O(nlogn)。 ...
深入解析三路快排:一种高效的排序算法
最新发布
qq_41591215的博客
08-14 701
在数据结构和算法的世界中,快排(Quick Sort)无疑是最受欢迎的排序算法之一。今天,探讨一种优化的快排变体——三路快排(3-Way Quick Sort),它在处理具有重复元素的数组时展现出了令人惊叹的效率。
比较排序——三路快速排序
m0_58679504的博客
02-01 795
三路快排
三路快速排序
muzigef的博客
05-05 2116
双路快速排序时间复杂度为O(nlog2n),空间复杂度为O(n) 双路快速排序的核心思想:单路快排会将等于V的元素分配在左侧或者右侧,当数组中有大量重复元素时,这将会导致左右两侧的元素数量极度不均衡,时间复杂度退化到O(n^2),,如下图所示:为了避免该问题,双路快排是将等于V的部分近乎平均的分配在左右两侧;三路快排是将等于V的部分集中到中间,左右两侧分别为小于V和大于V的部分,这样不用对大量...
三路快排
See what you want to see
06-05 204
三路快排适用于待排序元素存在大量重复的情况,可以接近线性时间复杂度。 public class Test { public static void main(String[] args){ Random random = new Random(); int[] nums = new int[20]; for (int i = 0;i < nums.length;i++) { nums[i] = random.nextInt(3); } new Test().quick
排序2-时间复杂度为O(nlogn)的算法 归并排序 快排
南国的技术栈
11-28 2361
上一篇博文排序1主要讲的是关于评定算法性能的一些指标,以及时间复杂为O(n2)的排序算法。这一篇博文我重点讲述世家复杂度为O(nlogn)的两个经典算法—归并排序快排 关于这两个算法 网上的资料很多 在面试中也会经常会被问到(特别是快排),这里我结合自己的理解和总结,写的不好的地方 请多指教。 归并排序(MergeSort) 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算...
冒泡、快速、选择、插入排序以及时间复杂度、空间复杂度的解析
八爪大头鱼
08-11 2500
四大排序时间复杂度和空间复杂度时间复杂度时间复杂度的表示方法时间复杂度分析和计算方法常见的几种时间复杂度常见的时间复杂度排序空间复杂度 时间复杂度 (1)时间频率 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 (2
数据结构和算法:05.稳定和不稳定排序、归并排序快速排序三路快排
东方升起代码的博客
10-30 3874
具体代码请看:NDKPractice项目的datastructure 1. 稳定排序和不稳定排序: 稳定排序概念:通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。 代表: 稳定排序:冒泡、插入、选择、归并 不稳定排序:希尔、快速排序、堆排序 2. 归并排序 每次合并操作的平均时间复杂度为O(n),而完全二叉树的深度为|log2n|。总的平均时间复杂度为O(nlogn)。而且
基本三路快排
weixin_42063047的博客
11-28 379
三路快排 突然想到复杂度是nlogn级别的排序算法,除了归并还有快排,之前学习过,但用到时都忘干净了,做个记录,方便以后查询。附上三路快排的思想图,便于理解。 #include&lt;iostream&gt; #include&lt;algorithm&gt; using namespace std; template &lt;typename T&gt; void __quicksort3(T...
三路排序算法
unber的博客
06-17 268
三路快速排序是双路快速排序的进一步改进版本,三路排序算法排序的数据分为部分,分别为小于 v,等于 v,大于 v,v 为标定值,这样部分的数据中,等于 v 的数据在下次递归中不再需要排序,小于 v 和大于 v 的数据也不会出现某一个特别多的情况),通过此方式三路快速排序算法的性能更优。
快排三路快排
weixin_43405946的博客
08-03 294
快排的正确写法,仔细推敲会有收获
快速排序-----指针分区法
qq_43679056的博客
06-04 813
快速排序-----指针分区法 1、算法的思想 根据快速排序算法思想,再加一条:我们在进行第一次排序完之后,只需要再进行大于主元,和小于主元那部分区域的排序即可,并不需要再进行等于主元这部分的比较 例子: 还未排序的:5, 10, 5, 2, 8, 5, 5, 5, 1, 9 第一次排序得到的结果:2, 1, 5, 5, 5, 5, 5, 8, 10, 9 之后,进行下一轮排序时,我们只需要排序[2,1]和[8,10,9]这部分 2、如何分区 首先:对于普通的快速排序算法,我们还需要多一个指针,用于指定等
数组排序(5) 快速排序指针分区法
qq_39940777的博客
02-12 790
目录 算法思想 指针分区法 代码实现(Java) 时间复杂度 算法思想 当所有数的左边的数据都小于等于这个数,右边的数据都大于这个数时,数组就有序了。 指针分区法 先初始化主元为首元,然后初始化指针:smaller和equal都初始化为下标为数组第二个、bigger初始化为尾元。smaller为扫描指针,每次移动sma...
算法<基于三路划分的快速排序>
Gpwner的博客
07-24 1543
当待排序元素序列中有大量的重复排序码时,简单的快速排序算法的效率将会降到非常之低。一种直接的想法就是将待排序列分成个子序列:一部分是排序码比基准元素排序码小的;一部分是与基准元素排序码等值的;一部分是比基准元素排序码大的,如下图所示: 但是,如果我们直接据此思想去编写实现算法的话,会让我们面临很大的困难。与基准元素等值的元素到底有多少?以及如何最快速有效地确定划分的边界?所以,完成这样的三路划分
史上最清晰的三路快速排序
03-15 1764
更多精彩文章,请关注公众号【TanLiuYi00】。 排序算法不论是在刷题还是面试都经常遇到,掌握它能提升自己的算法功力从而增加自己面试通过的几率。 本文主要介绍一下三路快排,并以微软的一道面试题leetcode75. 颜色分类作为例题来讲解,供大家参考,希望对大家有所帮助。 三路快排 使用快速排序的思想给带有大量的重复键值的数组进行排序,一种经典的实现方式就是三路快排(Quick Sort 3 Ways)。 主要思想 将整个数组分成部分,即小于 v、等于 v 和大于v。分割后...
快速排序算法实验:随机快排三路快排实现
- 三路快排:针对随机快排在处理重复元素时可能出现的问题,三路快排进行了优化。它分为 `、`=v` 和 `>v` 部分,更有效地处理相同值,减少不必要的交换操作。此外,通过增大系统栈的默认大小以防止递归过深导致的...
写文章

热门文章

  • 八大排序算法之归并排序(递归实现+非递归实现) 9622
  • 数据结构:堆的实现与建堆时间复杂度分析 5223
  • [计网底层小探索]:实现并部署多线程并发Tcp服务器框架(基于生产者消费者模型的线程池结构) 3935
  • C++:类的构造函数与析构函数 3315
  • C++:运算符重载与类的赋值运算符重载函数 2896

分类专栏

  • 青菜的Linux专栏 17篇
  • 计算机网络 5篇
  • 初学者日志 22篇
  • 进阶C++(C++与进阶数据结构) 13篇
  • 算法笔记 2篇
  • 图论数据结构 6篇
  • 计算机体系结构 2篇
  • 初阶C++ 21篇
  • 剑指offer练习日志 2篇
  • 初阶数据结构 18篇

最新评论

  • 八大排序算法之插入排序+希尔排序

    代码与艺术: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文 也欢迎您来逛逛我的博客互三哦~

  • 整形家族数据存储之 原码 补码 反码

    做而论道_CS: 计算机根本就不用原码和反码,只用补码。 所以,原码反码,都不需要讨论。 对补码的理解,也不用弄这么复杂。 所谓的补码,不过就是一个小学的知识点而已。 你看十进制,两位数:0~99。 可以有:27 + 99 = (一百) 26 也可以:27 - 1 = 26 如果你忽略进位,依旧保持两位数, 这两种算法的功能,就是相同的。 即,当你舍弃了进位:  正数,就可以当负数使用、用加法,就能实现减法运算。 在计算机中舍弃进位,会怎样?  计算机中,就全是正数了。  没有了负数,减法也不存在了,减法器,当然也没用了。  计算机有一个加法器,就能横行天下! ================== 舍弃进位,就是补码的来历和存在意义。 ================== 在两位十进制时,舍弃进位,就是减去一百。 那么,加上 99,再减去 100,当然就是 “-1 ” 了。 八位二进制数是:0000 0000 ~ 1111 1111。 也就是十进制的:0 ~ 255。 如果出现进位,就是:2^8 = 256。 那么,加上 1111 1111 (255),再减 256,也就是-1。 由此,计算机专家就发明了:-1 的补码是 1111 1111。 同样,-2 的补码就是:1111 1110 (254)。 还有,-3 的补码就是:1111 1101 (253)。 。。。 最后,-128 的补码是:1000 0000 (128)。 转换公式:负数的补码 = 2^8 + 该负数。 同样还有:正数的补码 = 2^8 + 该正数。 但是,正数加上 256,就会出现进位。 那就舍弃吧。 于是就有:正数的补码 = 该正数。 这就证明了:零和正数的补码,就是其本身。 例:求-31 的补码是多少? 解:256-31 = 225 = 1110 0001 (二进制)。 这不就完事了吗? 哪里还用:机器数真值原码反码取反加一符号位不变模 ... 老外脑子不够用,算术不灵,才 “发明” 了这许多的谎言。 谁要是跟老外学算术,立刻、马上,直接就掉沟里去了!

  • 八大排序算法之归并排序(递归实现+非递归实现)

    daiyanyun: 传过来的参数是数组的个数,没有减一把。

  • 八大排序算法之归并排序(递归实现+非递归实现)

    daiyanyun: 哪个两个有序序列的合并为什么不加上边界,left <= right, 传过来的参数是right - 1 吗表情包

  • 深刻解析TCP协议--传输层数据收发机制和内核视角下的数据报文收发过程

    努力的青菜: 谢谢兄弟

大家在看

  • linux基础-正则表达式
  • java计算机毕业设计文曦家教平台(开题+程序+论文)
  • 数据结构——不带头节点的双向不循环链表(链表如此简单) 648
  • 微信小程序中使用ECharts的正确姿势
  • 189基于java jsp SSM Springboot高校教务管理系统小程序考试安排课表管理(源码+文档+运行视频+讲解视频)

最新文章

  • 网络层IP协议和数据链路层--理解NAT/NAPT路由技术
  • 深刻解析TCP协议--传输层数据收发机制和内核视角下的数据报文收发过程
  • 应用层http协议包解析与https加密策略解析
2024年10篇
2023年77篇
2022年7篇

目录

目录

评论 138
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的青菜

谢谢各位爹娘的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家徐州商场装饰美陈杭州玻璃钢花盆市场室外玻璃钢花盆供应河南户外玻璃钢花盆安徽现代人物玻璃钢雕塑商场美陈的认识宝鸡知名校园玻璃钢景观雕塑江西水果玻璃钢雕塑制作青岛市玻璃钢人物雕塑批发厂家河源好看的玻璃钢雕塑东营玻璃钢花盆批发商场新年美陈提案天津市玻璃钢雕塑加工厂桂林玻璃钢座椅雕塑设计大唐历史玻璃钢人物雕塑长春公园玻璃钢雕塑生产厂家园林景观玻璃钢卡通雕塑制造沁阳玻璃钢雕塑厂家武威玻璃钢雕塑价格九江名人玻璃钢人物雕塑张掖玻璃钢雕塑泰州玻璃钢景观雕塑报价汉川玻璃钢花盆花器巨型玻璃钢广场雕塑银川玻璃钢植物雕塑哪家好魏都玻璃钢雕塑费用玻璃钢人物雕塑工单偏关商场美陈装饰淮安商场活动美陈长乐玻璃钢浮雕人物山水雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化