問題の説明
ちょうど今、私はC ++プログラミング言語を学んでいて、コードを書くことによってそれをすることにしました。min
配列の最初の形式の値から値に項目を並べ替えるアルゴリズムを作成してmax
、次のような整数の配列を取得しようとしています。
int arrayToSort[] = {3,5,3,1,8,7,2,4};
そして、この配列をソートするアルゴリズムを書いてみてください。以下にソースコードを示します
アルゴリズムI
int arrayToSort[] = {3,5,3,1,8,7,2,4};
int arrayToSortSize = sizeof(arrayToSort)/sizeof(int);
for(int i=1; i<arrayToSortSize; ++i) {
int* first = arrayToSort;
int* end = arrayToSort + arrayToSortSize;
for(first; first!=end-i; ++first) {
if (*first > *(first+1)) {
int temp = *first;
*first = *(first+1);
*(first+1) = temp;
}
}
}
このアルゴリズムは正しく機能し、配列内のすべての要素を正しく並べ替えますが、このアルゴリズムがそのような並べ替えを行うのに正しい1, 2, 3, 3, 4, 5, 7, 8
かどうかを知りたいのですが、この場合、これがすべての要素を並べ替える最短の方法ですか?
アルゴリズムII
ここでは同じアルゴリズムを実装していますが、今回はポインターの代わりに配列を使用しています。以下のソースコードをご覧ください。
int arrayToSortSize = sizeof(arrayToSort)/sizeof(int);
for(int i=1; i<arrayToSortSize; ++i) {
int* first = arrayToSort;
int* end = arrayToSort + arrayToSortSize;
for(int j=0; j<arrayToSortSize-i; j++) {
if (arrayToSort[j] > arrayToSort[j+1]) {
int temp = arrayToSort[j];
arrayToSort[j] = arrayToSort[j+1];
arrayToSort[j+1] = temp;
}
}
}
このアルゴリズムもうまく機能します。すべてのアイテムを正しくソートしますが、どのアルゴリズムを使用するのが良いか知りたいのですが、どちらが速いのでしょうか(そのうちの1つがそうである場合)?
質問
- どのアルゴリズムを使用するのが良いですか?
- どのアルゴリズムが速いですか?それとも同じ速度で動作しますか?
- アルゴリズムIまたはアルゴリズムIIはより良い方法で実装できますか?
- このアルゴリズムはどのように呼ばれますか?