アプリ版:「スタンプのみでお礼する」機能のリリースについて

閲覧ありがとうございます。
C言語超初心者です。

「基本交換法・基本挿入法をC言語でプログラミングせよ」という課題が出されました。
ググッてみたところ、乗っているのは数字を小さい順に並べるものばかりで、
作りたいのは数列(6 2 5 3 1 7 4)を大きい順に並べ直すというものです。

つまり(7 6 5 4 3 2 1)にしたいのですが、小さい数を右に右にずらすのではなく、
大きい数を左に左にずらすというのは可能でしょうか?
可能であれば、そのプログラムを教えていただきたいです。


できれば、学校で習っているのが下記の形から始めるというものなので、その形で書き始めていただけるとわかりやすいです。
#include <stdio.h>
void main(void)


その際、よろしければ説明(特にそれぞれの変数が何を指すのか)なども加えていただけると嬉しいです。


わがままばかりですいませんが、お力を貸してください><
よろしくお願い致します。

A 回答 (3件)

>多分どちらも最後の出力の当たりがおかしいと思うのですが


変数iとjを見直してください。

>【バブルソート】
ANo.2で指示したとおりに変更されていません。

>【挿入ソート】
if(a[i-1]<tmp) と不等号を変更したように,
while(j>0&&a[j-1]>tmp); の a[j-1]>tmp も同様に不等号を逆にしてください。
指摘し忘れてました,失礼。

>doと&&は未学習なのですが、違う表記とかってできますか?
do~while(後判断)を while(前判断)に変更する方はともかく,
&&(かつ)による複合条件式が使えないと
自然な発想でコードが書けないし,
違う表記をしてもそれもまた未学習だとなる恐れがあるので,
私は今回はパスします。
    • good
    • 0
この回答へのお礼

できました!!!
何回もコメントしていただいて
本当にありがとうございました><
本当に助かりました。

お礼日時:2011/02/08 21:46

▼バブルソート(無駄な処理がありますの方)


if(a[i]>a[i+1]){
 tmp=a[i];
 a[i]=a[i+1];
 a[i+1]=tmp;
}
を次のように変更。
if(a[j]<a[j+1]){
 tmp=a[j];
 a[j]=a[j+1];
 a[j+1]=tmp;
}

▼挿入ソート
if (data[i-1] > tmp) {
の不等号を < に変更。

この回答への補足

ありがとうございます
参考にしたんですが、上手くできません。
多分どちらも最後の出力の当たりがおかしいと思うのですが・・・
何がおかしいですか?


【バブルソート】
#include <stdio.h>
void main(void)

{
int i,j,tmp;
int a[]={6,2,5,3,1,7,4};
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
if(a[i]<a[j+1])
{
tmp=a[j];
a[j] =a[j+1];
a[j+1]=tmp;
}
}
}
for(i=0;i<7;i++)
{printf(“%d “,a[j]);}
}




【挿入ソート】
#include <stdio.h>
void main(void)

{
int i,j,tmp;
int a[]={6,2,5,3,1,7,4};

for(i=1;i<7;i++)
{
tmp=a[i];
if(a[i-1]<tmp)
{
j=i;
do
{
a[j]=a[j-1];
j--;
}
while(j>0&&a[j-1]>tmp);
a[j]=tmp;
}
}
for(i=0;i<7;i++)
{printf(“%d “,a[j]);}
}

*それと、このソートで出てくるdoと&&は未学習なのですが、違う表記とかってできますか?
もしできたらでいいのですが…

補足日時:2011/02/06 16:44
    • good
    • 0

>ググッてみたところ、乗っているのは数字を小さい順に並べるものばかり



そのコードが載っているURLを提示してください。
おそらく数か所を変更するだけで質問者が望むアルゴリズムになるでしょう。

この回答への補足

早速の回答ありがとうございます。
以下のURLで見つけました。

バブルソート
http://www.hrtdotnet.jp/pro/c/step3/step3_1.html
(無駄な処理がありますの方)

挿入ソート
http://ja.wikipedia.org/wiki/%E6%8C%BF%E5%85%A5% …

よろしくお願いします。

補足日時:2011/02/06 13:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!