选取了几个题目,练习了一下编程...
1. 对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。
#include <stdio.h>
#include <iomanip>
#include <iostream>
using namespace std;
void bubble(int nArray[], int nSize)//从小到大排序
{
bool bflag = false;//无序
for (int i=0; i<nSize-1 && !bflag; i++)
{
bflag = true;//假设有序
for (int j=0; j<nSize-i-1; j++)
{
if (nArray[j]>nArray[j+1])
{
bflag = false;
int temp = nArray[j];
nArray[j] = nArray[j+1];
nArray[j+1] = temp;
}
}
}
}
void sort(int nArray[], int nSize)
{
int *pnEven = new int[nSize];
int *pnOdd = new int[nSize];
int index_even=0, index_odd=0;
int even_count=0, odd_count=0;
for (int i=0; i<nSize; i++)
{
if (nArray[i]%2)
{
pnOdd[index_odd++] = nArray[i];
}
else
{
pnEven[index_even++] = nArray[i];
}
}
even_count = index_even;
odd_count = index_odd;
bubble(pnEven, even_count);
bubble(pnOdd, odd_count);
index_odd = 0;
index_even = even_count-1;
int nIndex = 0;
while(index_even>=0 && index_odd<odd_count)
{
if (nIndex%2==0)//第一位放奇数
{
nArray[nIndex++]=pnOdd[index_odd++];
}
else
{
nArray[nIndex++]=pnEven[index_even--];
}
}
while (index_even>=0)
{
nArray[nIndex++]=pnEven[index_even--];
}
while (index_odd<odd_count)
{
nArray[nIndex++]=pnOdd[index_odd++];
}
delete[] pnEven;
delete[] pnOdd;
}
int main()
{
int nArray[] = {1,3,343,12,22,75,32,21,54,55,78,23,11,32,15,47};
int nSize = sizeof(nArray)/sizeof(int);
sort(nArray, nSize);
for (int i = 0; i<nSize; i++)
{
//printf("%-10d", nArray[i]);
cout << std::left << setw(10) <<nArray[i];
if ((i+1)%5==0)
{
printf("\n");
}
}
return 0;
}