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;
}
这种算法只能求出数组左边的最小值,如果数组中有两个最小值,那么求出的数组位置就是左面最小值的位置。
6. 用C语言对一维数组排序,并输出原来的位置
可以先用冒泡排序对数组进行排序,然后对排序的数组进行遍历,找出其在排序之前数组中的位置
这种方法对于重复数组效果就不行了,因为它总是与第一个重复元素进行比较,如何值比较一次呢?
#include<stdio.h>
#include <cstring>
void SelectionSort(int *arr, int n)
{
for (int i = 0; i < n; i++)
{
int Minkey = arr[i];
for(int j=i; j<n; j++)
{
if(Minkey>arr[j])
{
int temp = arr[j];
arr[j]=Minkey;
Minkey=temp;
}
}
arr[i]=Minkey;
}
}
int main() {
int a[] = {5,1,1,1,1,0,1,1,1,2};
int b[10];
int c[10];
int k;
int n = sizeof(a)/sizeof(int);
memcpy(&b, &a, sizeof(a));
SelectionSort(a, n);
printf("The sorted array is:");
printf("\n");
for (int i = 0; i < n; i++) {
printf(" %d", b[i]);
}
printf("\n");
for (int ip = 0; ip < n; ip++) {
printf(" %d", a[ip]);
}
printf("\n");
for (int ii=0;ii<n;ii++)
{
for (int j=0;j<n;j++)
{
if (a[ii]==b[j])
{
c[k++] = j; //因为说的是第几位而不是下标
break;
}
}
}
for (int iii=0;iii<n;iii++)
{
printf("%d ",c[iii]);
}
printf("\n");
return 0;
}
改进:
#include<stdio.h>
#include <cstring>
void SelectionSort(int *arr, int n)
{
for (int i = 0; i < n; i++)
{
int Minkey = arr[i];
for(int j=i; j<n; j++)
{
if(Minkey>arr[j])
{
int temp = arr[j];
arr[j]=Minkey;
Minkey=temp;
}
}
arr[i]=Minkey;
}
}
int main() {
int z1=0,z2=1,z3=2,z4=3,z5=4;
int a[] = {1,2,1,1,-3};
int b[10];
int c[10];
int k = 0;
int n = sizeof(a)/sizeof(int);
memcpy(&b, &a, sizeof(a));
SelectionSort(a, n);
printf("The sorted array is:");
printf("\n");
for (int i = 0; i < n; i++) {
printf(" %d", b[i]);
}
printf("\n");
for (int ip = 0; ip < n; ip++) {
printf(" %d", a[ip]);
}
printf("\n");
for (int ii=0;ii<n;ii++)
{
if(a[ii] == b[z1])
{
c[k++]=z1;
z1=10;
}
else if(a[ii] == b[z2])
{
c[k++]=z2;
z2=10;
}
else if(a[ii] == b[z3])
{
c[k++]=z3;
z3=10;
}
else if(a[ii] == b[z4])
{
c[k++]=z4;
z4=10;
}
else if(a[ii] == b[z5])
{
c[k++]=z5;
z5=10;
}
}
for (int iii=0;iii<n;iii++)
{
printf("%d ",c[iii]);
}
printf("\n");
return 0;
}
void HeatingChannelArray(void)
{
int z0=0,z1=1,z2=2,z3=3,z4=4,z5=5,z6=6,z7=7,z8=8,z9=9, \
z10=10,z11=11,z12=12,z13=13,z14=14,z15=15;
int i,j;
getDValue();
memcpy(&SortArray,&TempDValue,sizeof(TempDValue));//原有数据拷贝
SelectionSort(TempDValue, CHANNELNUM);
for(i = 0; i < CHANNELNUM; i++)
{
if(TempDValue[i] == SortArray[z0])//排序后与原值比较
{
ArrayLabel[j++]=z0;
z0=16;//标志位更改不允许再次进入
}
else if(TempDValue[i] == SortArray[z1])
{
ArrayLabel[j++]=z1;
z1=16;
}
else if(TempDValue[i] == SortArray[z2])
{
ArrayLabel[j++]=z2;
z2=16;
}
else if(TempDValue[i] == SortArray[z3])
{
ArrayLabel[j++]=z3;
z3=16;
}
else if(TempDValue[i] == SortArray[z4])
{
ArrayLabel[j++]=z4;
z4=16;
}
else if(TempDValue[i] == SortArray[z5])
{
ArrayLabel[j++]=z5;
z5=16;
}
else if(TempDValue[i] == SortArray[z6])
{
ArrayLabel[j++]=z6;
z6=16;
}
else if(TempDValue[i] == SortArray[z7])
{
ArrayLabel[j++]=z7;
z7=16;
}
else if(TempDValue[i] == SortArray[z8])
{
ArrayLabel[j++]=z8;
z8=16;
}
else if(TempDValue[i] == SortArray[z9])
{
ArrayLabel[j++]=z9;
z9=16;
}
else if(TempDValue[i] == SortArray[z10])
{
ArrayLabel[j++]=z10;
z10=16;
}
else if(TempDValue[i] == SortArray[z11])
{
ArrayLabel[j++]=z11;
z11=16;
}
else if(TempDValue[i] == SortArray[z12])
{
ArrayLabel[j++]=z12;
z12=16;
}
else if(TempDValue[i] == SortArray[z13])
{
ArrayLabel[j++]=z13;
z13=16;
}
else if(TempDValue[i] == SortArray[z14])
{
ArrayLabel[j++]=z14;
z14=16;
}
else if(TempDValue[i] == SortArray[z15])
{
ArrayLabel[j++]=z15;
z15=16;
}
}
}
#include <stdio.h>
#include <cstring>
void SelectionSort(int *arr, int *order, int n)
{
for (int i = 0; i < n; i++)
{
order[i] = i;
}
for (int i = 0; i < n; i++)
{
int Minkey = arr[i];
int order_num = order[i];
for (int j = i; j < n; j++)
{
if (Minkey > arr[j])
{
int temp = arr[j];
arr[j] = Minkey;
Minkey = temp;
int temp2 = order[j];
order[j] = order_num;
order_num = temp2;
}
}
arr[i] = Minkey;
order[i] = order_num;
}
}
int main()
{
int a[] = {1, 1, 1, 1, -3};
int b[10];
int order[10];
int k = 0;
int n = sizeof(a) / sizeof(int);
memcpy(&b, &a, sizeof(a));
SelectionSort(a, order, n);
printf("The sorted array is:");
printf("\n");
for (int i = 0; i < n; i++)
{
printf(" %d", b[i]);
}
printf("\n");
for (int i = 0; i < n; i++)
{
printf(" %d", a[i]);
}
printf("\n");
for (int i = 0; i < n; i++)
{
printf(" %d", order[i]);
}
printf("\n");
return 0;
}