技事録

大学で人工知能の研究しています.

クイックソート

C言語クイックソートです.

#include <stdio.h>
#include <stdlib.h>

#define swap(type, x ,y) do {type t = x; x = y; y = t;} while(0)

void __quick_sort ( int* a, int left, int right )
{
	int pl, pr;
	int mid;
	int pivot;
    
	if ( left < right )
	{
		// 中央の要素をpivotとする.
		mid = ( left + right ) / 2;
        
		pivot = a[mid];
        
		pl = left;
		pr = right;
        
		while ( pl <= pr )
		{
			while ( a[pl] < pivot ) { ++pl; } // 左側のポインタの移動.
			while ( a[pr] > pivot ) { --pr; } // 右側のポインタの移動.
            
			if ( pl >= pr ) { break; }
            
			if ( pl < pr )
			{
				swap ( int, a[pl], a[pr] );
                
				pl++;
				pr--;
			}
		}
        
		if ( left < pl - 1 ) // 軸の左側に要素を2つ以上あれば再帰.
		{
			__quick_sort ( a, left, pl - 1 );
		}
		if ( pr + 1 < right ) // 軸の左側に要素を2つ以上あれば再帰.
		{
			__quick_sort ( a, pr + 1, right );
		}
        
	}
}

void quick_sort ( int* a, int size )
{
	__quick_sort ( a, 0, size - 1 );
}


int main ( void )
{
	int a[] = { 10, 20, 30, 5, 26, 2, 87, 12, 22, 7 };
	int size = sizeof ( a ) / sizeof ( a[0] );
    
	printf ( "ソート前の要素の表示\n" );
	for ( int i = 0; i < size; ++i )
	{
		printf ( "%d ", a[i] );
	}
	printf ( "\n" );
    
	quick_sort ( a, size );
    
	printf ( "ソート前の要素の表示\n" );
	for ( int i = 0; i < size; ++i )
	{
		printf ( "%d ", a[i] );
	}
	printf ( "\n" );
}

マージソート

久々にC言語つかいました.
院試勉強の一環ですが懐かしい...

#include <stdio.h>
#include <stdlib.h>

int *buff;

// 再帰呼び出し用
void __merge_sort ( int* a, int left, int right )
{
	if ( left < right )
	{
		int mid = ( left + right ) / 2;
        
		// 左半分ソートの再帰呼び出し
		__merge_sort ( a, left, mid );
		// 右半分ソートの再帰呼び出し
		__merge_sort ( a, mid+1, right );
        
		
		int i, j;
        
		// buffに左半分を順に保存
		for ( i = left; i <= mid; i++ )
			buff[i] = a[i];
		// buffに右半分を逆順に保存
		for ( j = right; i <= right; i++, j-- )
			buff[i] = a[j];
        
		i = left;
		j = right;
        
		int k;
        
		for ( k = left; k <= right; k++ )
			if ( buff[i] > buff[j] )
				a[k] = buff[j--];
			else
				a[k] = buff[i++];
	}
}

int merge_sort ( int* a, int size )
{
	if ( ( buff = calloc ( size, sizeof ( int ) ) ) == NULL )
		return -1;
    
	__merge_sort ( a, 0, size-1 );
    
	return 0;
}


int main ( void )
{
	int a[] = { 10, 20, 30, 5, 26, 2, 87, 12, 22, 7 };
	int size = sizeof ( a ) / sizeof ( a[0] );
    
	printf ( "ソート前の要素の表示\n" );
	for ( int i = 0; i < size; ++i )
	{
		printf ( "%d ", a[i] );
	}
	printf ( "\n" );
    
	merge_sort ( a, size );
	
	printf ( "ソート前の要素の表示\n" );
	for ( int i = 0; i < size; ++i )
	{
		printf ( "%d ", a[i] );
	}
	printf ( "\n" );
}

GitHub:Shopで買い物した.

GitHub:ShopでPayPalを使ってお買い物

先月, github:shopを使って初海外通販をしました.
とても簡単でPayPal英語表記の住所や氏名を登録して, 会計の際にその住所を選択するというだけでした. 送料が20.00ドルかかった.

どのくらいで届いたか

注文したのは3/20で, Shipping Confirmationが届いたのが3/26, 自宅に届いのが4/3で約2週間ほどかかりました. Shipping Confirmationには追跡用のURLがはられていたのですが, ロサンゼルスを通過したよっていうお知らせを最後に自宅に届くまで一切の情報がてにはいりませんでした...

何を買ったか

1x Die Cut GitHub Stickers - 10 Pack 3" for $2.00 each
1x Octobiwan Mug - White for $12.00 each
1x Octocat Laptop Decal - Octocat Laptop Decal for $10.00 each
を購入いたしました. Octocatかわいい!


f:id:ozw3253t2c0390a:20140404232338j:plainf:id:ozw3253t2c0390a:20140406222250j:plainf:id:ozw3253t2c0390a:20140408223931j:plain
MacBookデカールが若干ずれてしまった...