• 締切済み

ヒープソート

c言語 でランダムに文字を出力し、 それをヒープソートして昇順し、ならべかえる簡単なプログラムを教えていただけませんか?

みんなの回答

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

> ヒープソートまではできますが、それを配列に代入し、またソートし、配列に…といったものです。 ヒープソートを行なって、ソート済みのデータが配列に入っている状態で、 それをまたソートすることにどういった意味があるのでしょうか。

takeaduma
質問者

お礼

根に最大値を持っていって、それを昇順にソートする方法がいまいちわからなく… ヒープソートした配列とは別に空の配列を持って ヒープソートした根にある最大値を空の配列の後尾のほうに持っていくのかと思ってまして…

  • arain
  • ベストアンサー率27% (292/1049)
回答No.2

禁止事項の丸投げに該当しそうなのでアドバイスだけ まず、質問事項の中で何がわかりませんか? ・C言語で「ランダム」を作成する方法 ・「文字を出力」の意味 ・「ヒープソート」の意味がわからない ・「出力したものをソート」するための領域の確保の仕方 ・その他 全てが分からないということはないと思います。 プログラムは「細かい機能の組み合わせ」です。 まずはどういった機能が必要かを考え、その機能の実現方法としてどのようなソースを記述するかを考えます。 質問文では上記を怠っていると判断できるため「丸投げ」と解釈します。

takeaduma
質問者

お礼

ヒープソートまではできますが、それを配列に代入し、またソートし、配列に…といったものです。 >・「出力したものをソート」するための領域の確保の仕方

  • R32C
  • ベストアンサー率39% (115/290)
回答No.1

簡単でないかもしれせんが、 TOPPERS/JSP というμITRONというOSでは、 タイムイベント処理の並べ替えをヒープソートを 使っています。 kernel\time_event.c time_event.h にその処理が書かれています。 ダウンロードして、解凍して見てみてはいかがでしょうか

参考URL:
http://www.toppers.jp/jsp-download.html
takeaduma
質問者

お礼

わかりました。 ダウンロード解凍してみます

関連するQ&A

  • ヒープソートの比較回数

     ヒープソートの比較回数を表す一般式がわからないのでどなたか教えてください。  C=… のかたちでお願いします。

  • ヒープソートは2重ソートできない?

     ソートに関して詳しい方、相談にのっていただけたらと思います。  CGIを使ってヒープソートするロジックを組みました。  そのルーチンはただ単項データをソートするだけでなく、たとえば、配列変数 n1 と 配列変数 n2 にそれぞれデータが入っていたとき、n1 をソートすると、それに連動して n2 の中身も一緒にソートされます。  言うならば、バラバラに並んだビデオテープを番号順に並べ替えると、一緒にタイトルも並べ変わる感じです。  ところが、配列 n1 をソートしていてたまに同じ数字が入っていることがあります。そういうときは n2 の順にしたいのです。  そこで、先に n2 をソートしてから n1 をソートするといいのではと考え、そのようにプログラムを組んでみました。  ところが実際には、n1 をソートした瞬間に、せっかく並べ替えた n2 の内容がバラバラになってしまうのです。  「n1 の内容が同じ場合は n2 を昇順に並べる」という処理を記述していても、実際には n2 の内容はバラバラです。  これはヒープソートを使用している限り仕方のないことなのでしょうか。あるいは何らかの解決方法を知っている方、よろしくお願いします。

  • 乱数生成について

    c言語のプログラムで、1と-1をランダムにn個出力するプログラムを書きたいと思っています。どのようにすればいいでしょうか。

  • printfでの出力を監視

    Linuxでのプログラムについて質問です。 言語はCを使っています。 あるランダムでprintfにて文字列が出力されるというプログラムがあり、このプログラムに対してバックグラウンドにて監視し、特定の文字列が出力された場合それに対する動作を行うとういことはできるのでしょうか? 動作としては、 バックグラウンドにて監視プログラム起動 ↓ 文字列出力プログラム起動 ↓ 監視プログラムが特定の文字列を検出 ↓ それに対応する動作(別のプログラム起動等)を行う ということをさせたいと考えています。 よろしくお願いします。

  • C言語 乱数

    C言語 乱数 プログラミングの宿題なのですが、よく分かりません。教えていただける方、よろしくお願いします。 ・表示する文字数の長さは12とする。 ・表示する文字は毎回ランダムで表示すること。 ・文字は英字のうち、小文字のみとする。 ・プログラムにrandom()を使うこと。 ・プログラムにsrandom()を使うこと。 よろしくお願いします。

  • ヒープソート

    何回も申し訳ございません。ヒープソートを使用して、K番目に小さい配列の要素を見つけるプログラムを作成していますが、セグメンテーションフォルトが出力され、途方に暮れています。どなたか助けていただけないでしょうか? #include<stdio.h> #include<stdlib.h> #include<time.h> void heap(int c,int size,int *s){ int child,p; int tmp; child=s[c]; while(1){ p=(c-1)/2;//calculate an index of their parent if(c<0) break; if(c!=0){ if (s[c]>s[c-1]) { c=c-1; } } if (s[p]<=s[c]) break; // break if a parent is smaller than a child tmp=s[p]; s[p]=s[c]; s[c]=tmp; c=p;//declare a parent node as a child node } } void heap_sort(int c,int size,int *s){ int tmp,i,j; //make the first heap for(i=size-1;i>=0;i--){ heap(i,size,s); } //exchange root s and the last s, and sort them for(i=size-1;i>=0;i--){ tmp=s[0]; s[0]=s[i]; s[i]=tmp; for(j=i;j>=0;j--){ heap(j-1,j,s); } } } main() { int num,i,k; int high; int low=0; int s[20]; struct timeval t1,t2; printf("How many elements?:"); scanf("%d",&high); printf("?n"); printf("What number?:"); scanf("%d",&k); printf("?n"); srand((unsigned)time(NULL)); for(i=0;i<high;i++){ s[i]=rand()%10; printf("%d ",s[i]); } printf("?n"); gettimeofday(&t1,0); heap_sort(high-1, high,s); gettimeofday(&t2,0); printf("Time=%dmicrosec?n", t2.tv_usec-t1.tv_usec); printf("The %dth smallest is %d?n ", k,s[k]); }

  • Cのバブルソートに関する問題(超初級らしい)

    int型配列{10,4,7,50,48,3}を昇順に並べて、順に標準出力しなさい という問題を出されたのですが、今日はじめてC言語に(プログラミング自体はじめて)触れた私にとっては、まったくわからない問題です。 実行結果は 3 4 7 10 48 50 になるらしいのですが、どのようにプログラムを書いたらよいのかさっぱりわかりません。 どなたかご指導いただけたら幸いです。よろしくお願いします。

  • 昇順に並べ替えるプログラム

    (C言語)実行例のような3つの整数を読み込み昇順に並べ替えるプログラムはどう作成すればいいのでしょうか? 実行例 1:45 2:43 3:38 昇順に並べ替えました。 1:38 2:43 3:45

  • 最小全域木問題のC言語プログラム

     次元制限のある最小全域木問題とはどういうことで、それについてC言語を使用してプログラミングを組みたいのですが・・・・。何から手をつければいいのかさっぱりわかりません。ヒープソートのプログラムを使用するなど考えてみたのですがしっくりきません。少しでも参考例を挙げてくれたら幸いです。どうかお願いしますm(__)m。

  • このエラーについて

    C言語でプログラムを作成しgccでコンパイルしたんですけど 「computer06.c:8: conflicting types for `heapsort' computer06.c:5: previous declaration of `heapsort'」 というエラーがでたんですが、どう直したらいいんですか?このエラーの意味を教えてください・・・ 特定のファイルから数字を読み込みヒープソートをしそれにかかった時間を求めるというプログラムです。よろしくお願いします