% ./a.out < num_data.txt 1 4 7 19 28
1 4 7 19 28
3ですが、「ソートが完了した配列について、隣の数との大小を比較して きちんと昇順になっているか確かめる」くらいしか思いつきませんでした。
% sort -n num_data.txt 1 4 7 19 28
% sort -n num_data.txt > expected.txt % ./a.out < num_data.txt > actual.txt % diff expected.txt actual.txt
# Makefile for sort # Satofumi KAMIMURA # $Id$ # Compile options CXXFLAGS = -O0 -Wall -Werror LDFLAGS = LDLIBS = # Target TARGET = sort all : ${TARGET} clean : ${RM} *.o ${TARGET} actual.txt expected.txt test : all @sort -n num_data.txt > expected.txt @./sort < num_data.txt > actual.txt @diff expected.txt actual.txt && echo "O.K." || echo "!!! fail" .PHONY : all clean ######################################################################j
% make
% make test
/* STL によるソートプログラム Satofumi KAMIMURA $Id$ */ #include <vector> #include <iostream> #include <iterator> #include <algorithm> using namespace std; int main(int argc, char *argv[]) { // 標準入力からのデータ読み出し vector<int> data((istream_iterator<int>(cin)), istream_iterator<int>()); // ソート sort(data.begin(), data.end()); // 標準出力へのデータ出力 for (std::vector<int>::iterator it = data.begin(); it != data.end(); ++it) { cout << *it << endl; } return 0; }
#include <stdio.h> #define NUM 5 /*ソートする整数の個数*/ /*ソートプログラム*/ int main(void) { int box[NUM]; int i, j, tmp; for(i=0; i<NUM; i++) { scanf("%d", &box[i]); } for(i=0; i<NUM-1; i++) { for(j=i+1; j<NUM; j++) { if(box[j] < box[i]) { tmp = box[j]; box[j] = box[i]; box[i] = tmp; } } } for(i=0; i<NUM; i++) { printf("%d\n", box[i]); } return 0; }
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { enum { DATA_SIZE = 1024 }; int data[DATA_SIZE]; int size; int i; int ret; /* 標準入力からの読み出し */ for (size = 0; size < DATA_SIZE; ++size) { int ret = 0; if ((ret = scanf("%d", &data[size])) == EOF) { break; } if (ret <= 0) { /* 読み込みに失敗した場合 */ --size; } } if (i == DATA_SIZE) { printf("data is too many! (over %d)\n", DATA_SIZE); exit(1); } /* ソート処理 */
//読み込んだ数字をソートして表中出力 #include<stdio.h> #include<stdlib.h> //qsort用比較関数 int cmp(int *n, int *m) { if(*n>*m) return 1; if(*n<*m) return -1; else return 0; } int main(void) { int i=0,sort[5],c; while(i!=5){ scanf("%d",&c); sort[i]=c; i++; } qsort(sort,5,sizeof(int),(int(*)(const void*, const void*))cmp); for(i=0;i<5;i++) printf("%d\n",sort[i]); /* ここから正確性の検証 配列のすべての値において、その隣の値の大小関係は同じかどうかの検証 */ i=1; while(cmp(&sort[i],&sort[i-1])>=0){ i++; if(i==5){//大小関係の比較が配列の最後まで終われば printf("Sorting ended accurately\n"); return 0; } } printf("Sorting failed\n"); for(i=0;i<5;i++) printf("%d\n",sort[i]); return 0; }
int main(int argc, char *argv[]) { enum { DataSize = 1024 }; int data[DataSize]; inputData(data, DataSize); sort(data, DataSize); outputData(data, DataSize); }
// 標準入力からの数値を昇順にソートし、数値毎に改行して標準出力に出力する
/* ここから正確性の検証 配列のすべての値において、その隣の値の大小関係は同じかどうかの検証 */ for (i=1;i<5;++i) { if(cmp(&sort[i],&sort[i-1])<0) { printf("Sorting failed\n"); for(i=0;i<5;i++) printf("%d\n",sort[i]); exit(1); } } //大小関係の比較が配列の最後まで終われば printf("Sorting ended accurately\n"); return 0; }
/*五個のデータのソートプログラム。リダイレクションver*/ #include <stdio.h> #include <stdlib.h> int cmp(const void *x, const void *y); int main(){ int a[5],i; for(i=0;i<5;i++) { scanf("%2d",&a[i]);/*データの入力*/ } qsort(a,5,sizeof(int),cmp);/*クイックソート関数*/ for(i=0;i<5;i++){ printf("%2d\n",a[i]); } return 0; } int cmp(const void *x, const void *y)/*クイックソート関数の比較関数:昇順*/ { return *(int*)x - *(int*)y; }
//入力された数列をソートするプログラム #include<stdio.h> int main(void){ int n=5; //ソートする数字の数 int num[n]; int i,j; int min; for(i=0;i<n;i++) //数値を配列に入れる scanf("%d",&num[i]); for(i=0;i<n;i++){ //ソート min=num[i]; for(j=i;j<n;j++){ if(min>num[j]){ min=num[j]; num[j]=num[i]; num[i]=min; } } printf("%d\n",num[i]); } }
#include <iostream> #include <vector> using namespace std; typedef vector<int> IntVector; void QuickSort(IntVector& arr, int first, int last) { int i, j; int x; x = arr[(first + last) / 2]; i = first; j = last; for(;;){ int tmp; while(arr[i] < x) i++; while(x < arr[j]) j--; if(i >= j) break; tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; i++; j--; } if(first < i - 1) QuickSort(arr, first, i - 1); if(j + 1 < last) QuickSort(arr, j + 1, last); } int main() { IntVector arr; // read cin for(;;){ int num; cin >> num; if(cin.eof()) break; arr.push_back(num); } // sort QuickSort(arr, 0, arr.size() - 1); // display result int arrSize = arr.size(); for(int i = 0; i < arrSize; i++){ cout << arr[i] << endl; } // check array sorted arrSize = arr.size(); int tmp = -INT_MAX; for(int i = 0; i < arrSize; i++){ if(tmp > arr[i]){ cerr << "sort failed" << endl; break; } else{ tmp = arr[i]; if( i == (arrSize - 1) ) cerr << "sort succeeded" << endl; } } return 0; }
// check array sorted bool isCorrect = true; int tmp = numeric_limits<int>::min(); for(int i = 0; i < arrSize; ++i){ if(tmp > arr[i]){ cerr << "sort failed" << endl; isCorrect = false; break; } tmp = arr[i]; } if(isCorrect) { cerr << "sort succeeded" << endl; return 0; }