アルゴリズムの基礎3

基本的なアルゴリズムの高速なソート。

基本的な

  • 1.参照番号(参照番号が使用されている)を設定します。

  • 2.参照配列は中心に移動の数(左からは、それが正しい数よりも大きい少ないそれ以上である)です。

  • 3.この配列の参照番号は、2つの部分、各部の動作の最初のステップで囲まれています。(思考の分割後のプロセスは、再帰を使用することが必要です)

  • 4.終了し、出力

  • 具体的な処理フロー図を参照してください。
    ここに画像を挿入説明

難しさ

  • シーケンスの真ん中にどのように参照番号?方法は次のとおりです。シーケンスの両端からセットは、jがときi、jは、彼らはローリングスタートの両端からあるそうという、二つの小さなボールで
    以下参照ストップよりも数を満たして(必ずスクロールjに作る)は、そして私は、iとjの基準数よりも多い数満たさ
    尖った要素は2個のボールは、2つのボール端部出会うまで続け交換素子ベースラインに向かって転がり、私は、ラウンドを指摘、スワップ終わり。
  • アプリケーションのアイデア再帰。

まあ、私は、コードの最初の、そんなに言いました:

#include<stdio.h>
int n,a[101];//定义全局变量

void quicksort(int left,int right)
{
	int i,j,temp,t;
	if(left>right)
	return;
	t=a[left];//设定基准数
	i=left;
	j=right;
	while(i!=j)
	{
		while(a[j]>=t&&i<j)//先让j移动
		j--;
		while(a[i]<=t&&i<j)//i再移动
		i++;
		//找到符合要求的两个元素,交换他们在数组中的位置
		if(i<j)//当两个小球没有相遇时
		{
			temp=a[i];
			a[i]=a[j];
			a[j]=temp;
		}
	 } 
	 //让基准数到达中间
	 a[left]=a[i];
	 a[i]=t;
	 //接下来重点来了
	 //递归思想的应用
	 quicksort(left,i-1);//继续处理左边的 
	 quicksort(i+1,right);//继续处理右边的 
	return ;
 } 
 
 int main ()
 {
 	int i,j;
 	scanf("%d",&n);
 	for(i=1;i<=n;i++)
 	scanf("%d",&a[i]);
 	quicksort(1,n);//快速排序函数调用
	//输出结果
	for(i=1;i<=n;i++)
	printf("%d ",a[i]);
	
	getchar();getchar();
	return 0; 
 }

入力検証値

10
5 4 8 2 0 1 6 8 3 7

結果は以下の通りであります:

0 1 2 3 4 5 6 7 8 8

リマーク

  • だから、どのようにそれは小さな行に大きな?

    nは1〜[I]配列の最後のステップを変更することは非常に簡単; iは++ 1からnまで変化; I-こと(非常に容易ではありません)

  • あなたの助けを期待した私自身の理解!

公開された12元の記事 ウォンの賞賛0 ビュー723

おすすめ

転載: blog.csdn.net/weixin_43252204/article/details/83588087