一组整数中含有若干0,将这组整数中的所有0移至数列末尾,并将非零元素按从大到小排序,将数字序列保存在int A【nSize】输出两行 第一行为重排后的序列 第二行输出一个整数值为重排后第一个0元素的下标
时间: 2024-03-06 17:48:06 浏览: 57
好的,根据您的要求,可以使用冒泡排序的思想来实现。具体实现过程如下:
1. 遍历整个数组,将所有非零元素往数组前面移动,同时将零往数组后面移动。
2. 遍历整个数组,对非零元素进行冒泡排序,从大到小排序。
3. 找到第一个零元素的位置,保存在变量 zeroIndex 中。
下面是代码实现:
```c++
#include <iostream>
using namespace std;
void moveZeroAndSort(int A[], int nSize, int& zeroIndex) {
int i, j, tmp;
for (i = 0, j = 0; j < nSize; j++) {
if (A[j] != 0) {
tmp = A[i];
A[i] = A[j];
A[j] = tmp;
i++;
}
}
for (i = 0; i < nSize - 1; i++) {
for (j = 0; j < nSize - i - 1; j++) {
if (A[j] < A[j + 1]) {
tmp = A[j];
A[j] = A[j + 1];
A[j + 1] = tmp;
}
}
}
zeroIndex = i;
}
int main() {
int A[] = {5, 0, 3, 0, 1, 4, 0, 2};
int nSize = sizeof(A) / sizeof(A[0]);
int zeroIndex;
moveZeroAndSort(A, nSize, zeroIndex);
for (int i = 0; i < nSize; i++) {
cout << A[i] << " ";
}
cout << endl << zeroIndex << endl;
return 0;
}
```
其中,变量 i 和 j 分别表示遍历数组时的下标,tmp 用于交换两个元素的值。第一个循环将非零元素往数组前面移动,并将零往数组后面移动。第二个循环对非零元素进行冒泡排序,从大到小排序。最后,变量 zeroIndex 表示第一个零元素的位置。
使用该函数可以将数组中的所有零移至数组末尾,并将非零元素按从大到小排序,同时输出第一个零元素的下标。
阅读全文