【アルゴリズム】挿入ソート、バブルソート、選択ソート、集計ソートC言語実装
単純なアルゴリズムは直接コードをつけます挿入ソート バブルソート 選択ソート 集計ソート
void
printval(int *a, int n)
{
for (int i = 0; i < n; ++i)
std::cout << a[i] << std::endl;
}
void
insertsort(int *a, int n)
{
for (int i = 1; i <= n - 1; i++){
int j = i - 1;
//val
int val = a[i];
for (; j >= 0; j--){
//
if (val < a[j]){
//
a[j + 1] = a[j];
}
//
else
break;
}
a[j+1] = val;
printval(a, n);
std::cout << "_________after one sort" << std::endl;
}
}
void
myswap(int a[], int i, int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
void
bubblesort(int a[], int n)
{
if (a == NULL || n < 2)
return;
for (int end = n - 1; n > 0; n--){
for (int i = 0; i < end; i++){
if (a[i] > a[i + 1]){
myswap(a, i,i+1);
}
}
}
}
void
selectsort(int a[], int n)
{
if (a == NULL || n < 2)
return;
for (int i = 0; i < n; i++){
int min = i;
for (int j = i + 1; j < n; j++)
min = a[min] < a[j] ? min : j;
myswap(a, i, min);
}
}
void
mergesort(int a[], int n)
{
if (a == NULL || n < 2)
return;
mergesort(a, 0, n - 1);
}
void
mergesort(int a[], int l,int r)
{
if (a == NULL || (r-l+1) < 2)
return;
int mid = l + ((r-l)>>1);
mergesort(a, l, mid);
mergesort(a, mid+1, r);
merge(a, l,mid,r);
}
void
merge(int a[], int l,int m, int r)
{
//
int len = r - l + 1;
//
int *temparry = (int *)malloc(sizeof(int)*len);
int i = l;
int j = m+1;
//
int index = 0;
while (i <= m && j <= r){
temparry[index++] = a[i] < a[j] ? a[i++] : a[j++];
}
//
while (i <= m){
temparry[index++] = a[i++];
}
while (j<=r)
temparry[index++] = a[j++];
//
for (int i = 0; i < len; i++)
a[l + i] = temparry[i];
delete temparry;
}