题目:
给你一个按非递减顺序(即递增) 排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
代码:
#include <iostream>
#include <cmath>
using namespace std;
//采用类归并排序的思想,找到负数和非负数分界位置,由中间向两侧遍历,使用一个辅助数组将平方值存入
void square_sort (int a[], int n){
int B[n]; //辅助数组
memcpy(B,a,n*sizeof(int));
int i , j , k; //k记录非负数开始的数组下标,i记录最后一个负数的数组下标
for(k = 0; k < n; k++ ){
if(a[k] >= 0){
i = k - 1;
break;
}//if
}//for
while( i>=0 && k<n ){
//由中间向两边遍历
if( abs(B[i]) <= B[k] ) a[j++] = B[i]*B[i--];
else a[j++] = B[k]*B[k++];
}//for
while(i>=0) a[j++] = B[i]*B[i--];
while(k<n) a[j++] = B[k]*B[k++];//只会执行一个
}
//打印函数
void printout(int s[], int num){
for(int i = 0; i < num; i++) {
cout << s[i] << " ";
}//for
cout <<endl;
}
int main() {
int s[] = {-4,-2,1,3,6,9,12};//给定非递增数组
cout << "Before sort: " <<endl;
printout(s,7); //打印对照组
square_sort(s,7);
cout << "After sort: " <<endl;
printout(s,7); //打印排序后数组
return 0;
}