同調実験室 - ARGIUS.net

TOP PAGE INDEX Number / 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

15:配列(4) ソート

機能

  1. 文字列で順不同の配列を作成
  2. 配列を表示
  3. 配列をソート
  4. ソートした結果を表示

ソートのロジックは問わない(一般的と思われるものを採用)

実行結果

$ ./test
[before]
1 : kitchen
2 : bowl
3 : mixer
4 : knife
5 : cup
[after]
1 : bowl
2 : cup
3 : kitchen
4 : knife
5 : mixer
$

ソース

C

#include <stdio.h>
#include <stdlib.h> /* qsort */
#include <string.h> /* strcmp */

#define LENGTH(ARRAY, TYPE) sizeof(ARRAY) / sizeof(TYPE)

/* 一覧表示 */
void print_array(char * * array, int size)
{
  int i;
  for (i = 0; i < size; i++) {
    printf("%d : %s\n", i+1, array[i]);
  }
}

/* 比較関数 */
int pstrcmp(const void * a, const void * b)
{
  return strcmp(*(const char * *)a, *(const char * *)b);
}

int main()
{
  int i;
  
  /* 文字列の配列 */
  char * array[] = {"kitchen", "bowl", "mixer", "knife", "cup"};
  
  /* 配列を一覧表示 */
  printf("[before]\n");
  print_array(array, LENGTH(array, char *));
  
  /* クイックソート */
  qsort(array, LENGTH(array, char *), sizeof(char *), pstrcmp);
  
  /* ソート後の配列を一覧表示 */
  printf("[after]\n");
  print_array(array, LENGTH(array, char *));
  
  return 0;
}

C++

#include <iostream>
#include <string>   
#include <vector>
#include <algorithm> // sort

// 一覧表示
void print_array(const std::vector<std::string> array)
{
  std::vector<std::string>::size_type i;
  for (i = 0; i < array.size(); i++) {
    std::cout << i+1 << " : " << array[i] << std::endl;
  }
}

int main()
{
  std::vector<std::string>::size_type i;
  
  // 文字列の配列
  std::vector<std::string> array;
  array.push_back("kitchen");
  array.push_back("bowl");
  array.push_back("mixer");
  array.push_back("knife");
  array.push_back("cup");
  
  // 配列を一覧表示
  std::cout << "[before]" << std::endl;
  print_array(array);
  
  // ソート
  sort(array.begin(), array.end());
  
  // ソート後の配列を一覧表示
  std::cout << "[after]" << std::endl;
  print_array(array);
  
  return 0;
}

Java

import java.util.*; // List, ArrayList, Collections

class Main {
    
    private static void printArray(List array) {
        
        for (int i = 0; i < array.size(); i++) {
            System.out.println((i+1) + " : " + array.get(i));
        }
        
    }
    
    public static void main(String[] args) {
        
        // 文字列の配列
        List array = new ArrayList();
        array.add("kitchen");
        array.add("bowl");
        array.add("mixer");
        array.add("knife");
        array.add("cup");
        
        // 配列を一覧表示
        System.out.println("[before]");
        printArray(array);
        
        // ソート
        Collections.sort(array);
        
        // ソート後の配列を一覧表示
        System.out.println("[after]");
        printArray(array);
        
    }
    
}

Perl

# 一覧表示
sub print_array {
    my $array = shift;
    for (my $i = 0; $i < @{$array}; $i++) {
        printf"%d : %s\n", $i+1, $array->[$i];
    }
}

# 文字列の配列
my @array = ("kitchen", "bowl", "mixer", "knife", "cup");

# 配列を一覧表示
print"[before]\n";
print_array(\@array);

# ソート(文字列として)
@array = sort { $a cmp $b } @array;

# ソート後の配列を一覧表示
print"[after]\n";
print_array(\@array);

Ruby

# 定義追加 (配列の一覧表示)
class Array
  def print
    i = 1
    each do |s|
      puts "#{i} : " + s
      i += 1
    end
  end
end

# 文字列の配列
array = ["kitchen", "bowl", "mixer", "knife", "cup"]

# 配列を一覧表示
puts "[before]"
array.print

# ソート(文字列として)
array.sort!

# ソート後の配列を一覧表示
puts "[after]"
array.print

最終更新日 : 2004.08.23

TOP PAGEINDEX Number / 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18