C言語の練習

Cはもうほとんど忘れてしまっているので、復習をかねて昔読んだアルゴリズムの本の問題をやってみようと思った。

  • bubble sort
#include <stdio.h>

void swap( int *a, int *b);
void bubbleSort( int *a, int length );

void bubbleSort( int *a, int length ) {
	for(int i=length-1; i>0; i--) {
		for(int j=0; j<i; j++){
			if(a[j] > a[j+1]) swap(a+j, a+j+1);
		}
	}
}

inline void swap( int *a, int *b ){
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

int main(int *argv, int args) {
	int a[] = {5,4,3,2,1};
	bubbleSort( a, 5 );
	
	for(int i=0; i<5; i++) {
		printf("a[%d]: %d\n", i, a[i]);
	}
	
	return 0;
}
  • selection sort
#include <stdio.h>

void swap( int *a, int *b);
void selectionSort( int *a, int length );

void selectionSort( int *a, int length ) {
	for(int i=0; i<length-1; i++) {
		int min_index=i;
		for(int j=i+1; j<length; j++){
			if(a[min_index]>a[j]) min_index=j;
		}
		swap( a+i, a+min_index );
	}
}

inline void swap( int *a, int *b ){
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

int main(int *argv, int args) {
	int a[] = {4,3,1,12, 15, 20, 2, 5};
	selectionSort( a, 5 );
	
	for(int i=0; i<5; i++) {
		printf("a[%d]: %d\n", i, a[i]);
	}
	
	return 0;
}
  • selection sort
#include <stdio.h>

void swap( int *a, int *b);
void selectionSort( int a[], int length );
void shift( int a[], int start, int end );

void selectionSort( int a[], int length ) {
       for(int i=1; i<length; i++) {
               int tmp=a[i];
               for(int j=0; j<i; j++){
                       if( a[j] > tmp ) {
                               shift(a, j, i-1);
                               a[j] = tmp;
                               break;
                       }
               }
       }
}

void shift( int a[], int start, int end ){
       for( int i=end; start<=i; i-- ){
               a[i+1] = a[i];
       }
}

inline void swap( int *a, int *b ){
       int tmp = *a;
       *a = *b;
       *b = tmp;
}

int main(int *argv, int args) {
       int a[] = {4,3,1,12, 15, 20, 2, 5};
       selectionSort( a, 5 );

       for(int i=0; i<5; i++) {
               printf("a[%d]: %d\n", i, a[i]);
       }

       return 0;
}
  • stack class

push, pop, peek

  • queue class

insert, delete, peek

  • circular queue class
  • priority queue class

insert, delete, peek

  • InToPost 関数

中値記法をReverse Polish Notation に変換する。