バブルソート、クイックソート、二分挿入ソートc++実装
2164 ワード
まずin-place交換の方法を差し上げます
バブルソート実装
高速ソートの実装
二分挿入ソート
//in-place swap
void swap_int(int& a, int& b)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
バブルソート実装
/*
*
* ,
* :
* ,
*/
void BubbleSort(int a[], int len)
{
bool swaped = false;
for (int i = 0; i < len; ++i)
{
for (int j = 1; j < len - i; ++j)
{
if (a[j - 1] > a[j])
{
swap_int(a[j - 1], a[j]);
swaped = true;
}
}
if (!swaped) break;
}
}
高速ソートの実装
/*
*
* , , ,
*/
void QuickSort(int s[], int left, int right)
{
if (left < right)
{
int i = left, j = right, x = s[left];
while (i < j)
{
while (i < j && s[j] >= x) // x
j--;
if (i < j)
s[i++] = s[j];
print_arr(s, SIZE);
while (i < j && s[i]< x) // x
i++;
if (i < j)
s[j--] = s[i];
print_arr(s, SIZE);
}
s[i] = x;
QuickSort(s, left, i - 1); //
QuickSort(s, i + 1, right);
}
}
二分挿入ソート
/*
*
* ,
*/
int SearchBinary(int a[], int value, int left_index, int right_index)
{
if (right_index <= left_index)
return a[left_index] < value ? left_index+1:left_index;
int mid = (right_index + left_index) / 2;
if (value == a[mid])
return mid + 1;
if (value > a[mid])
return SearchBinary(a, value, mid + 1, right_index);
return SearchBinary(a, value, left_index, mid - 1);
}
void InsertSort(int a[], int len)
{
for (int i = 1; iindex; --j)
{
a[j] = a[j - 1];
}
a[index] = tmp;
}
}
}