プログラマー試験ノート4: ソートアルゴリズム

プログラマー試験ノート4: ソートアルゴリズム

理由はよく分かりませんが、WORD ファイル内のすべての日付が変更されました。WORD マクロ ウイルスの可能性があります。しかし、なぜ感染したのでしょうか?これは本当に奇妙です。私はマクロを使ったことがありません。忘れてください。今それに対処する時間はありません。急いでこのチュートリアル日記を完成させる必要があります。

今日の授業は、ようやくアルゴリズムという本題に入りました。まだ始まったばかりなので、簡単なソートアルゴリズムから始めましょう。次のような質問をコピーしておきました。

すでにソートされた配列があります。ここで数値を入力し、元のソート規則に従って配列に挿入します。

このトピックを見たとき、私は自信が持ててすぐに書き上げました。しかし、私のプログラムに致命的な欠陥があることを誰が知っていたでしょうか。最初に先生に見せたとき、私はとても誇りに思っていましたが、先生が私の間違いを指摘したとき、本当に申し訳なく思いました。私は間違っていたので、みんなが比較できるように、私が出した答えを書き留めることにしました。

#定義 n 8
主要()
{
int a[n];
整数 i、j、t、s;
(i=1;i<=7;i++) の場合
10 は i-1 です。
(i=0;i < 7;i--) の場合
もし ( a[ i ] < a[ i+1 ] )
{ s = a[ i ] ; a[ i ] = a[ i+1] ; a[ i+1] = s; }
(i=0;i<7;i++) の場合
printf("%d,a[ i ]);
}

間違いがなく、本当に正しいように見えますが、注意しないと見逃してしまうかもしれません。先生には、この能力が備わっているので、私の間違いをゆっくりと教えましょう。実は、間違いは最後に値が割り当てられていない要素です。初期値が渡されていないため、ランダムに生成された数字は非常に大きくなったり、非常に小さくなったりする可能性があります。ただし、挿入された数字よりも小さい場合は、正しい並べ替えではなくなります。さて、これで終わりなので、正しい手順を見てみましょう。

#定義N8
主要()
{
整数a[N] = {20,30,40,50,60,70,80};
整数n、i;
(i=N-1;i>=0;i--) の場合
{
if(n そうでなければ break;
}
1. 関数は、n から 1 までの整数である。
}

より良いソートアルゴリズムを紹介します。ソートを説明する際、先生は4日目に図1のような絵を描きました。この絵は当時のソート状況を簡単に示し、順序をより明確にします。しかし、もっと重要な点は、ソースコードを見ただけで目が回り、何が起こっているのか全く分からなくなるということです。私自身もこのプログラムを書いたときにこの方法に従ってみたのですが、よく理解できなかったので、皆さんにもこの方法を学ぶことをお勧めします。

ソートといえば、バブルソートという新しいソート方法を教わります。以前QBでこれを習ったことを覚えていますが、今日、先生の話を聞いて自分で描いてみたら、本当に分かりやすくなりました。バブル ソート法は、プログラムの 2 つのサイクルによって決定されるため、実際には左沈降ソート法とも呼ばれます。下から上に向かう場合はもちろんバブル ソート、そうでない場合は上から下に向かう場合は沈降ソートです。次の 2 つのプログラムが表示されます。

整数 n=6,i,j;
(i=n-1; i > 0; i--) の場合
(j=0; j < i; j++) の場合
a[j]>a[j+1]の場合{スワップ};

上記はバブリング法です

整数 n=6,i,j;
(i=0; i < n; i++) の場合
(j=n-1; j > i; j--) の場合
if(a[j]これは沈んでいます。

今日は基本的に一日中このアレンジの練習をしました。もうすぐ学校が終わる時間でしたが、先生は時間をうまく管理してくれたので、まったく無駄がなく、授業を30分延長してくれました。ああ〜!時には他人が良いと思うこともありますが、時には本当に悪いと思うこともあります。しかし、何があっても、彼は結局私たちの先生です。彼は C 言語の条件文の説明を終えるためだけに 30 分も私たちを遅らせましたが、正直に言うと、それでも何かを学びました。

C 言語には、条件演算子 ?:、基本的な if ステートメント、switch ステートメントなど、いくつかの形式の条件文があります。最も柔軟性が高いのは条件演算子 ?: で、これは C 言語で唯一の三項演算子でもあります。なぜこれほど柔軟なのでしょうか? パラメータが式だからです。式は C 言語の最も柔軟な部分です。では、なぜ柔軟性がないのでしょうか?ソースプログラムは次のとおりです。

整数a=5,b=10,c=8;
もし(a>b)
if(a>c)printf("a";
そうでない場合、(b>c)printf("b";
それ以外の場合はprintf("c";

このソースコードを見て違和感を感じませんか?これもC言語のもう一つの特徴です。このプログラムの答えがわかりますか?でも実は難しくないし、プログラムも短いです。答えを教えましょう。答えは b を出力することです。ロジックはとてもシンプルで一目でわかります。誰ですか?誰が?誰がここでふざけているんだ、答えは出力 b だ、バカ!あなたの文章力は十分ではないので、プログラムを整理しましょう

整数a=5,b=10,c=8;
もし(a>b)
もし(a>c)
printf("a";
それ以外
if(b>c)printf("b";
それ以外の場合はprintf("c";

今ははっきりと見えますか?最初の if ステートメントは最初から真ではないので、答えは何もありません。では、どうして答えが存在するのでしょうか?これも状況を示しているので、適切なコード形式を維持する必要があります。適切なコーディング スタイルがあれば、適切なプログラムが作成されます。そして今日、私は一つのことを理解しました。次の if ステートメントを見ていきたいと思います。

もしも
そうでなければ
もしそうでなければ
そうでなければ
もし
それ以外

当初、この 2 つは異なるものだと思っていました。QB では、これら 2 つは異なる if 文であるという印象を持っていました。でも、今日はそれが分かったので、皆さんも分かるはずです。多分、私はただのバカなだけでしょう。

C 言語のスイッチも他の高級言語とは異なります。お気づきですか?さて、4日目の図2を見てみましょう。この図では、この文と他の文の違いが明確に示されており、条件に定数が使われているため、先生自身はこのswitch文をあまり使いたくないと言っていました。この条件演算子を理解したらどうなるでしょうか? : 本当に便利です。無限にネストできます。ここではこれ以上は言いません。ゆっくり体験して勉強してください。

<<:  3つの主要なSQL ServerアルゴリズムのI/Oコストの簡単な分析

>>:  知恵くんの“いいとこ”が明らかに!初のユニバーサルな具現化ベースモデル、ロボットは「理解はできるができない」状態に別れを告げる

ブログ    
ブログ    

推薦する

...

人工知能は本当に人間の仕事を置き換えるのでしょうか?

今年に入ってから、新型コロナウイルス感染症の継続的な感染拡大により世界的に景気が低迷し、多くの国や地...

世界の技術大国の人工知能+インテリジェント製造戦略の展開を振り返る

1. アメリカ合衆国2016 年 10 月、米国政府は「人工知能の未来への準備」と「国家人工知能研究...

...

焦点: 注目すべき 6 つのスマート セキュリティ トレンド

スマート セキュリティは、新しい AI 機能のおかげで、静的なセキュリティ ビデオ録画からリアルタイ...

米研究機関:中国は2030年までにAI研究で世界をリードすると予想

アメリカのテクノロジーメディアGeekWireによると、米国シアトルのアレン人工知能研究所(AI2)...

機械学習は2021年にこれらの5つの業界を変革するだろう

機械学習は、COVID-19 によって揺さぶられた世界におけるスムーズな移行を可能にしています。機械...

...

アイデアこそが王様!メンサ国際元会長が2021年の人工知能の応用を総括

[[443263]]人工知能の将来の発展の方向性を真に理解するには、まだ長い道のりが残っています。 ...

...

AIは感情に関してより賢くなってきているのでしょうか?人間もそうすべきだ

人々は、一人でいるときと公共の場では行動が大きく異なりますが、基本的な性格は同じままです。観客のいな...

...

モバイルアプリの開発とビジネスにおける人工知能の役割は何ですか?

人工知能の誕生により、モバイル アプリケーションに大きな可能性をもたらすまったく新しい時代が到来しま...

ビッグデータと人工知能 - 機械的思考から統計的思考へ

今日は、ビッグデータ、人工知能、認知問題の解決の関係ロジックについて話す記事を書こうと思います。した...

...