先ほどの応用についての質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kos-mos

先ほどの応用についての質問です。

#1

投稿記事 by kos-mos » 15年前

またまた何度もすみません。
今度は先ほどご指導いただいた「挿入ソートを用いて値の小さい順に表示させる」という宿題についての疑問なのですが、これを「大きい順」にするにはどのようにしたらいいのでしょうか?

先ほどの宿題の内容は以下の通りです。

=問題=

一次配列(要素はint型、要素数は30)に格納されている要素を値の小さい順に並べ替える。
配列の初期値は以下のように,配列の初期化で指定する.
int array[N] = {636, 80, 246, 766, 881, 383, 244, 671, 503, 331, 444, 723, 916, 287, 492, 719, 476, 187, 704, 115, 774, 334, 618, 625, 582, 938, 427, 831, 899, 999};
挿入ソート(insertion sort)アルゴリズムを用いる。

=アルゴリズム=

1. ソート済み位置を、配列先頭の要素番号-1から1ずつ増やしながら、配列末 尾の要素番号-1になるまで以下の処理を繰り返す。
 1-1. ソート済み位置+1の位置に格納されている要素を挿入要素とする。
 1-2. 挿入位置←ソート済み位置+1
 1-3. 現在位置←ソート済み位置
 1-4. 現在位置が配列先頭の要素番号以上であり、かつ現在位置の要素が 挿入要素よりも大きい限り以下の処    理を繰り返す。
  1-4-1. 現在位置の要素を1つ後ろの位置に格納する。
  1-4-2. 挿入位置←現在位置
  1-4-3. 現在位置を配列の先頭方向に1つ戻す。
 1-5. 挿入要素を挿入位置に格納する。
2. 配列の各要素を表示する。

OS:Vista
コンパイラ:VC++ 2008
C++は数カ月程度の初心者です。
三度目の投稿なので至らないところもあると思いますが、どうかよろしく願いします。

#include <iostream>
using namespace std;

#define N 30  //配列の要素数

void main(){
	int array[N] = {636, 80, 246, 766, 881, 383, 244, 671, 503, 331, 444, 723, 916, 287, 492, 719, 476, 187, 704, 115, 774, 334, 618, 625, 582, 938, 427, 831, 899, 999};
	int sortedPos;    //ソート済み位置
	int pos;          //現在位置
	int insertElem;   //挿入要素
	int insertPos;    //挿入位置
	
	//1. ソート済み位置を、配列先頭の要素番号-1から1ずつ増やしながら、配列末 尾の要素番号-1になるまで以下の処理を繰り返す。
	for(sortedPos = -1; sortedPos < N-1; sortedPos++){

		//1-1. ソート済み位置+1の位置に格納されている要素を挿入要素とする。 
		insertElem = array[sortedPos +1];
		
		//1-2. 挿入位置←ソート済み位置+1 
		insertPos = sortedPos +1;
		
		//1-3. 現在位置←ソート済み位置 
		pos = sortedPos;
		
		//1-4. 現在位置が配列先頭の要素番号以上であり、かつ現在位置の要素が 挿入要素よりも大きい限り以下の処理を繰り返す。 
		while( pos >= 0 && array[pos] > insertElem){
			
			//1-4-1. 現在位置の要素を1つ後ろの位置に格納する。 
			array[pos +1] = array[pos];

			//1-4-2. 挿入位置←現在位置 
			insertPos = pos;
			
			//1-4-3. 現在位置を配列の先頭方向に1つ戻す。 
			pos = pos -1;
		}

		//1-5. 挿入要素を挿入位置に格納する。 
		array[insertPos] = insertElem;
	}

	//2. 配列の各要素を表示する。
	for(int i = 0; i < N; i++){
		cout << array <<endl;
	}
}

sizuma

Re:先ほどの応用についての質問です。

#2

投稿記事 by sizuma » 15年前

先ほどは、
挿入すべき値より大きかったら一つづつずらしていきました。
降順にしたいならば、
挿入すべき値より小さかったら一つづつずらしていけばいいですよね。

kos-mos

Re:先ほどの応用についての質問です。

#3

投稿記事 by kos-mos » 15年前

なるほど、わかりました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る