ソート
バブルソート(基本交換法、隣接交換法)
安定な内部ソート。O(n^2)
C
#include<stdio.h>
int main(){
int i, j, temp, ptr[] = {8,4,3,7,6,5,2,1}, n = 8;
/* Bubble sort */
for(i = 1; i <= n-1; ++i)
for(j = 0; j < n-i; ++j)
if(ptr[j] > ptr[j+1]){
temp = ptr[j];
ptr[j] = ptr[j+1];
ptr[j+1] = temp;
}
for(i = 0; i < n; ++i) printf("%d ", ptr[i]);
return 0;
}
挿入ソート(インサーションソート、基本挿入法)
安定な内部ソート。O(n^2)
C
#include<stdio.h>
int main(){
int i, j, temp, ptr[] = {8,4,3,7,6,5,2,1}, n = 8;
/* Insertion sort */
for(i=1; i<n; ++i)
for(j=i; j>0 && ptr[j-1]>ptr[j]; --j){
temp = ptr[j];
ptr[j] = ptr[j-1];
ptr[j-1] = temp;
}
for(i = 0; i < n; ++i) printf("%d ", ptr[i]);
return 0;
}
選択ソート(セレクションソート)
内部ソートだが、安定ソートではない。O(n^2)
C
#include<stdio.h>
int main(){
int i, j, min, temp, ptr[] = {8,4,3,7,6,5,2,1}, n = 8;
/* Selection sort */
for(i = 0; i < n-1; ++i){
min = i;
for(j = i+1; j<n; ++j)
if(ptr[min] > ptr[j]) min = j;
temp = ptr[i];
ptr[i] = ptr[min];
ptr[min] = temp;
}
for(i = 0; i < n; ++i) printf("%d ", ptr[i]);
return 0;
}
マージソート
安定ソートだが、O(n)の外部記憶を必要とする。O(n log n)
C
#include<stdio.h>
int temp[8];
void MergeSort(int *ptr, int l, int r){
int i, j, k, m;
if(l >= r) return;
m = (l+r) / 2;
MergeSort(ptr, l, m);
MergeSort(ptr, m+1, r);
for(i = l; i <= m; i++) temp[i] = ptr[i];
for(i = m+1, j = r; i <= r; ++i, --j) temp[i] = ptr[j];
i = l;
j = r;
for(k = l; k <= r; k++){
if(temp[i] <= temp[j]) ptr[k] = temp[i++];
else ptr[k] = temp[j--];
}
}
int main(){
int i, ptr[] = {8,4,3,7,6,5,2,1}, n = 8;
MergeSort(ptr, 0, n-1);
for(i = 0; i < n; ++i) printf("%d ", ptr[i]);
return 0;
}
最終更新:2010年08月05日 23:02