64,646
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
//奇偶交叉排放
void cross(int *src, int size)
{
int tmp;
int odd_flag = 1;
int i, j;
if (NULL == src || size <= 0)
return;
for (i = 0; i < size; ++i)
{
if (odd_flag != (src[i] & 1))
{
for (j = i + 1; j != size; ++j)
{
if (odd_flag == (src[j] & 1))
{
tmp = src[i];
src[i] = src[j];
src[j] = tmp;
}
}
if (j == size)
{
return;
}
}
odd_flag ^= 1;
}
}
//分别选择排序
void my_select_sort(int *src, int size)
{
int i, j;
int size_short = size - 1;
int tmp;
int odd_flag = 1;
if (NULL == src || size <= 0)
return;
for (i = 0; i < size_short; ++i)
{
for (j = i + 1; j < size; ++j)
{
if ((odd_flag == (src[j] & 1)) && (odd_flag == 1 ? src[j] < src[i] : src[j] > src[i]))
{
tmp = src[j];
src[j] = src[i];
src[i] = tmp;
}
}
odd_flag ^= 1;
}
}
void func(int *src, int size)
{
int i;
if (NULL == src || size <= 0)
return;
cross(src, size); //先奇偶交叉排放
my_select_sort(src, size); //再分别选择排序
for (i = 0; i < size; ++i)
{
cout<<src[i]<<' ';
}
cout<<endl;
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9,10};
func(a, sizeof(a) / sizeof(a[0]));
system("pause");
return 0;
}
#include<iostream>
using namespace std;
//奇偶交叉排放
void cross(int *src, int size)
{
int tmp;
int odd_flag = 1;
int i, j;
if (NULL == src || size <= 0)
return;
for (i = 0; i < size; ++i)
{
if (odd_flag != (src[i] & 1))
{
for (j = i + 1; j != size; ++j)
{
if (odd_flag == (src[j] & 1))
{
tmp = src[i];
src[i] = src[j];
src[j] = tmp;
}
}
}
odd_flag ^= 1;
}
}
//分别选择排序
void my_select_sort(int *src, int size)
{
int i, j;
int size_short = size - 1;
int tmp;
int odd_flag = 1;
if (NULL == src || size <= 0)
return;
for (i = 0; i < size_short; ++i)
{
for (j = i + 1; j < size; ++j)
{
if ((odd_flag == (src[j] & 1)) && (odd_flag == 1 ? src[j] < src[i] : src[j] > src[i]))
{
tmp = src[j];
src[j] = src[i];
src[i] = tmp;
}
}
odd_flag ^= 1;
}
}
void func(int *src, int size)
{
int i;
if (NULL == src || size <= 0)
return;
cross(src, size); //先奇偶交叉排放
my_select_sort(src, size); //再分别选择排序
for (i = 0; i < size; ++i)
{
cout<<src[i]<<' ';
}
cout<<endl;
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9,10};
func(a, sizeof(a) / sizeof(a[0]));
system("pause");
return 0;
}
#include<iostream>
using namespace std;
void aux(
int *src,
int size,
int *odd,
int *odd_num,
int *even,
int *even_num
)
{
int i, j, tmp;
int *cur, *num;
*odd_num = 0;
*even_num = 0;
for (i = 0; i < size; ++i)
{
cur = ((tmp = src[i]) & 1) ? odd + *odd_num : even + *even_num;
num = ((tmp = src[i]) & 1) ? odd_num : even_num;
//奇偶各自插入排序
while (cur > odd)
{
if (tmp < *(cur - 1))
{
*cur = *(cur - 1);
}
else
{
break;
}
--cur;
}
*cur = tmp;
++*num;
}
//拷贝到原数组
for (i = 0, j = *even_num; i != *odd_num && j != 0; )
{
*src++ = odd[i++];
*src++ = even[--j];
}
}
void func(int *src, int size)
{
int *odd = new int[size];
int *even = new int[size];
int odd_num, even_num;
int i;
aux(src, size, odd, &odd_num, even, &even_num);
for (i = 0; i < size; ++i)
{
cout<<src[i]<<' ';
}
cout<<endl;
delete[]odd;
delete[]even;
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9,10};
func(a, sizeof(a) / sizeof(a[0]));
system("pause");
return 0;
}
else if (1 == array[j] % 2 ? array[j] > array[k] : array[j] < array[k]) {
#include <iostream>
void select_sort(int array[], int size)
{
bool bDiffTreat = true; // need differentiate odd and even
for (int i = 0; i < size - 1; ++i) {
int j = i;
bool bFindFirst = (!bDiffTreat || 1 == (array[i] + i) % 2); // find first odd/even number
for (int k = i + 1; k < size; ++k) {
if (!bDiffTreat || 1 == (array[k] + i) % 2) {
if (!bFindFirst) {
j = k;
bFindFirst = true;
}
else if (array[j] > array[k]) {
j = k;
}
}
}
if (!bFindFirst) {
bDiffTreat = false;
--i;
}
else if (i != j) {
array[i] ^= array[j];
array[j] ^= array[i];
array[i] ^= array[j];
}
}
}
void print(int array[], int size)
{
for (int i = 0; i < size; ++i) {
std::cout << array[i] << ' ';
}
std::cout << std::endl;
}
int main()
{
{
int array[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int size = sizeof(array) / sizeof(array[0]);
select_sort(array, size);
print(array, size);
}
{
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int size = sizeof(array) / sizeof(array[0]);
select_sort(array, size);
print(array, size);
}
{
int array[] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int size = sizeof(array) / sizeof(array[0]);
select_sort(array, size);
print(array, size);
}
{
int array[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
int size = sizeof(array) / sizeof(array[0]);
select_sort(array, size);
print(array, size);
}
{
int array[] = {9, 7, 5, 3, 2, 1, 0};
int size = sizeof(array) / sizeof(array[0]);
select_sort(array, size);
print(array, size);
}
{
int array[] = {8, 6, 4, 3, 2, 1, 0};
int size = sizeof(array) / sizeof(array[0]);
select_sort(array, size);
print(array, size);
}
return 0;
}