クイックソート
アルゴリズムの説明:
左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);
}