?1.?对负数数组取绝对值进行排序(从大到小)
#include<stdio.h>
#include<math.h>
void SelectionSort(int *arr, int n)
{
for (int i = 0; i < n; i++)
{
int Maxkey = abs(arr[i]);
for(int j=i; j<n; j++)
{
if(Maxkey<abs(arr[j]))
{
int temp = abs(arr[j]);
arr[j]=abs(Maxkey);
Maxkey=abs(temp);
}
}
arr[i]=abs(Maxkey);
}
}
int main() {
int a[] = {-12,-7,-9,-22,-22,-88,-4,-1,1,-1,-53};
int n = sizeof(a)/sizeof(int);
InsertSort(a, n);
printf("The sorted array is:");
for (int i = 0; i < n; i++) {
printf(" %d", a[i]);
}
printf("\n");
return 0;
}
2.?对负数数组取绝对值进行排序(从小到大)
#include<stdio.h>
#include<math.h>
void SelectionSort(int *arr, int n)
{
for (int i = 0; i < n; i++)
{
int Minkey = abs(arr[i]);
for(int j=i; j<n; j++)
{
if(Minkey>abs(arr[j]))
{
int temp = abs(arr[j]);
arr[j]=abs(Minkey);
Minkey=abs(temp);
}
}
arr[i]=abs(Minkey);
}
}
int main() {
int a[] = {-12,-7,-9,-22,-22,-88,-4,-1,1,-1,-53};
int n = sizeof(a)/sizeof(int);
SelectionSort(a, n);
printf("The sorted array is:");
for (int i = 0; i < n; i++) {
printf(" %d", a[i]);
}
printf("\n");
return 0;
}
?2.1 在keil5中需要包括头文件
#include <math.h>
#include <stdlib.h>//abs
void SelectionSort(int8_t *arr, int8_t n)
{
int8_t Minkey;
int8_t temp;
for (int8_t i = 0; i < n; i++)
{
Minkey = abs(arr[i]);
for(int j=i; j<n; j++)
{
if(Minkey>abs(arr[j]))
{
temp = abs(arr[j]);
arr[j]=abs(Minkey);
Minkey=abs(temp);
}
}
arr[i]=abs(Minkey);
}
}
?2.2 sizeof(array)/sizeof(int)
array是个数组,
sizeof (array)就是这个数组所占的内存总量(字节数),
sizeof(int)就是单个所占的内存。
所以,sizeof(array)/sizeof(int)就是array数组的元素的个数。
3. 求一维数组最大值的位置
求出数组长度,设立一个变量imax记录当前最大值的下标;对数组进行遍历比较,总是把最大值的下标赋给imax,遍历完成后imax即为所求位置。
#include<stdio.h>
int main(void){
int a[]={1,6,18,19,13,5,2,-20,30,4,12,14,15,16,17,7,8,9,10,11},i,imax,ln;
ln=sizeof(a)/sizeof(int);
for(i=imax=0;i<ln;i++)
if(a[imax]<a[i])
imax=i;
printf("The maximum is the subscript of %d elements.\n",imax);
return 0;
}
4.?求一维数组最小值的位置
#include<stdio.h>
int main(void){
int a[]={1,6,18,19,13,5,2,-20,30,4,12,14,15,16,17,7,8,9,10,11},i,imin,ln;
ln=sizeof(a)/sizeof(int);
for(i=imin=0;i<ln;i++)
if(a[imin]>a[i])
imin=i;
printf("The minimum is the subscript of %d elements.\n",imin);
return 0;
}
5.?求一维数组绝对值最小值的位置
#include<stdio.h>
#include<math.h>
int main(void){
int a[]={4,6,18,19,13,5,2,-20,30,4,12,1,-1,16,17,7,8,9,10,11},i,imin,ln;
ln=sizeof(a)/sizeof(int);
for(i=imin=0;i<ln;i++)
if(a[imin]>abs(a[i]))
imin=i;
printf("The minimum is the subscript of %d elements.\n",imin);
return 0;
}
这种算法只能求出数组左边的最小值,如果数组中有两个最小值,那么求出的数组位置就是左面最小值的位置。
|