導入された2つの優先順位 - 高速かつバブル行

クイックソート

アルゴリズムの説明:
左Jを定義私はRと右端= Lを=
[/ 2(R + L)として中間中間数をとる ] 判定ミッド=
:クイックソート旅行
左から始まるが徐々にiの値まで増加していますまず、この時点で[I]>中間アウトループのを見つけ
、その後、徐々にA [J] <ループのうち中間場合、jの最初の値まで右から減少
にI <jの両方を満足しなければならないこの時点ですなわち、右に左とjに私を保つためには、左から右へと大規模なデータの小さな部分と一致して
満たされる条件上、次に交換価値互いに
及び方法インクリメントIデクリメントj個の参照は、Jは、I <満たす
サイクルを継続すること満たされ
、さもなければ再帰を使用小さなシーケンスの並べ替えのために

void qSort(int a[],int l,int r)
{
	if (l > r) 
	{
		return;    //参数不对  退出
	}
	int i, j, mid, p;
	i = l;
	j = r;
	mid = a[(l + r) / 2];                  
	do
	{
		while (a[i] < mid) i++;     //如果左边第一个大于mid的数找到了 就退出循环 等待交换     
		while (a[j] > mid) j--;   //如果右边第一个小于mid的数找到了  就退出循环  
		if (i < j)  //判断  j的数是否是在i的右边
		{                                
			p = a[i];
			a[i] = a[j];
			a[j] = p;
			i++; //一定要对数据进行更新
			j--;                          
		}
		else if (i == j) 
		{
			i++;  //对序列的数据进行更新
			j--;
		
		}

	} while (i < j);                                 
	if (l < j)  qSort(a,l, j);      //再分别对子序列进行排序         
	if (i < r)  qSort(a,i, r);
}

バブルソート

説明:
隣接する要素を比較しました。最初は、二以上である場合には、それらの2を交換しました。
最初のペアの最初から最後のペアの終わりに、隣接する要素のペアごとに同じ作業を行います。この時点で、それは最後の要素は、最大数であるべきです。
最後の1を除いて、すべての要素について、これらの手順を繰り返します。
数字の組を比較する必要がなくなるまで、たびに少なくなり要素を上記の手順を繰り返し続ける
。1. 9 10 8 36 5 1私は=
8 1 5 36 9 10
8 36 5 1 9 10
8 10 5 36 1 9
8 5 36 9.1 10
。8つの5 36 9 10 1行う5回
I = 2
。8 5 36 9 10 1
。8 36 5 9 10 1
。8 36 9 5 10 1
。8 36 9 10 5 1が
4回行われる
iが3 =
36. 5. 1. 8 9 10
36 8 10 5 1 9
36 8 10 5 9 1行う三回

=。4 I
36 5 1 9 10 8
36 5 10 1 8 9は、
2回
(交換ブレーク記述に発生していない場合は以下なので、最適化、およびその時間を比較するために再比較必要に必要としない並ん)...
比較の数の可視あたりの旅行はNiで

void bSort(int a[], int n)  //n的值应该是元素的个数
{
	bool bo;
	int i = 1,temp;
	do
	{
		bo = true;    //优化做法  当下面没有发生交换的时候就退出循环  并且已经排序好了
		for (int j = 0; j < n - i; ++j) 
		{
			if (a[j] > a[j + 1]) 
			{
				temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
				bo = false;
			}
		}
		++i;
	} while (!bo);
}
发布了19 篇原创文章 · 获赞 3 · 访问量 3816

おすすめ

転載: blog.csdn.net/weixin_42792088/article/details/87386741