- 締切済み
ヒープソート
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- asuncion
- ベストアンサー率33% (2126/6288)
> ヒープソートまではできますが、それを配列に代入し、またソートし、配列に…といったものです。 ヒープソートを行なって、ソート済みのデータが配列に入っている状態で、 それをまたソートすることにどういった意味があるのでしょうか。
- arain
- ベストアンサー率27% (292/1049)
禁止事項の丸投げに該当しそうなのでアドバイスだけ まず、質問事項の中で何がわかりませんか? ・C言語で「ランダム」を作成する方法 ・「文字を出力」の意味 ・「ヒープソート」の意味がわからない ・「出力したものをソート」するための領域の確保の仕方 ・その他 全てが分からないということはないと思います。 プログラムは「細かい機能の組み合わせ」です。 まずはどういった機能が必要かを考え、その機能の実現方法としてどのようなソースを記述するかを考えます。 質問文では上記を怠っていると判断できるため「丸投げ」と解釈します。
お礼
ヒープソートまではできますが、それを配列に代入し、またソートし、配列に…といったものです。 >・「出力したものをソート」するための領域の確保の仕方
- R32C
- ベストアンサー率39% (115/290)
簡単でないかもしれせんが、 TOPPERS/JSP というμITRONというOSでは、 タイムイベント処理の並べ替えをヒープソートを 使っています。 kernel\time_event.c time_event.h にその処理が書かれています。 ダウンロードして、解凍して見てみてはいかがでしょうか
お礼
わかりました。 ダウンロード解凍してみます
関連するQ&A
- ヒープソートは2重ソートできない?
ソートに関して詳しい方、相談にのっていただけたらと思います。 CGIを使ってヒープソートするロジックを組みました。 そのルーチンはただ単項データをソートするだけでなく、たとえば、配列変数 n1 と 配列変数 n2 にそれぞれデータが入っていたとき、n1 をソートすると、それに連動して n2 の中身も一緒にソートされます。 言うならば、バラバラに並んだビデオテープを番号順に並べ替えると、一緒にタイトルも並べ変わる感じです。 ところが、配列 n1 をソートしていてたまに同じ数字が入っていることがあります。そういうときは n2 の順にしたいのです。 そこで、先に n2 をソートしてから n1 をソートするといいのではと考え、そのようにプログラムを組んでみました。 ところが実際には、n1 をソートした瞬間に、せっかく並べ替えた n2 の内容がバラバラになってしまうのです。 「n1 の内容が同じ場合は n2 を昇順に並べる」という処理を記述していても、実際には n2 の内容はバラバラです。 これはヒープソートを使用している限り仕方のないことなのでしょうか。あるいは何らかの解決方法を知っている方、よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- printfでの出力を監視
Linuxでのプログラムについて質問です。 言語はCを使っています。 あるランダムでprintfにて文字列が出力されるというプログラムがあり、このプログラムに対してバックグラウンドにて監視し、特定の文字列が出力された場合それに対する動作を行うとういことはできるのでしょうか? 動作としては、 バックグラウンドにて監視プログラム起動 ↓ 文字列出力プログラム起動 ↓ 監視プログラムが特定の文字列を検出 ↓ それに対応する動作(別のプログラム起動等)を行う ということをさせたいと考えています。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- ヒープソート
何回も申し訳ございません。ヒープソートを使用して、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・C++・C#
- Cのバブルソートに関する問題(超初級らしい)
int型配列{10,4,7,50,48,3}を昇順に並べて、順に標準出力しなさい という問題を出されたのですが、今日はじめてC言語に(プログラミング自体はじめて)触れた私にとっては、まったくわからない問題です。 実行結果は 3 4 7 10 48 50 になるらしいのですが、どのようにプログラムを書いたらよいのかさっぱりわかりません。 どなたかご指導いただけたら幸いです。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 昇順に並べ替えるプログラム
(C言語)実行例のような3つの整数を読み込み昇順に並べ替えるプログラムはどう作成すればいいのでしょうか? 実行例 1:45 2:43 3:38 昇順に並べ替えました。 1:38 2:43 3:45
- 締切済み
- C・C++・C#
- 最小全域木問題のC言語プログラム
次元制限のある最小全域木問題とはどういうことで、それについてC言語を使用してプログラミングを組みたいのですが・・・・。何から手をつければいいのかさっぱりわかりません。ヒープソートのプログラムを使用するなど考えてみたのですがしっくりきません。少しでも参考例を挙げてくれたら幸いです。どうかお願いしますm(__)m。
- 締切済み
- C・C++・C#
お礼
根に最大値を持っていって、それを昇順にソートする方法がいまいちわからなく… ヒープソートした配列とは別に空の配列を持って ヒープソートした根にある最大値を空の配列の後尾のほうに持っていくのかと思ってまして…