c语言:数组的多个元素获取,交换,排序(冒泡,选择)

37 阅读2分钟

获取多个数据

运用for循环

#include <stdio.h>
int main(){
    int arr[4];
    int newArr[4];
    for(int i = 0; i < 4; i++){
        printf("请输入第%d个整数:", i+1);
        scanf("%d", &arr[i]);
    }
    for(int i = 0; i < 4; i++){
        newArr[i] = arr[3-i];
    }
    for(int i = 0; i < 4; i++){
        printf("%d ", newArr[i]);
    }
    return 0;
}

元素交换

#include<stdio.h>
void swap(int arr[],int m,int n)
{
    int temp=arr[m];
    arr[m]=arr[n];
    arr[n]=temp;
}
int main(){
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    swap(arr,2,4);
    for(int i=0;i<10;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

洗牌(打乱顺序)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void swap(int arr[],int m,int n)
{
    int a=arr[m];
    arr[m]=arr[n];
    arr[n]=a;
}
int main(){
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    srand(time(NULL));
    for(int i=0;i<20;i++)
    {
        int m=rand()%10;
        int n=rand()%10;
        swap(arr,m,n);
    }
    for(int i=0;i<10;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

冒泡排序

优先解决最大值,从大到小

#include<stdio.h>
void swap(int arr[],int m,int n)
{
    int temp=arr[m];
    arr[m]=arr[n];
    arr[n]=temp;
}
void sort(int arr[],int len){
    for(int i=0;i<len-1;i++){
    for(int j=0;j<len-i-1;j++)
    {
        if(arr[j]>arr[j+1]){
            swap(arr,j,j+1);
        }
    }
   }
}
int main(){
    int arr[10]={10,3,2,5,7,2,9,2,1,8};
    int len=sizeof(arr)/sizeof(arr[0]);
    sort(arr,len);
    for(int i=0;i<10;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

正常会将len个循环跑完,会有浪费的状况 算法优化:可以提前结束代码,减少消耗的算力

#include <stdio.h>
void swap(int arr[], int m, int n)
{
    int temp = arr[m];
    arr[m] = arr[n];
    arr[n] = temp;
}
void sort(int arr[], int len)
{
    for (int i = 0; i < len - 1; i++)
    {
        int flag = 1;
        for (int j = 0; j < len - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                swap(arr, j, j + 1);
                flag = 0;
            }
        }
        if (flag == 1)
        {
            break;
        }
    }
}
int main()
{
    int arr[10] = {10, 3, 2, 5, 7, 2, 9, 2, 1, 8};
    int len = sizeof(arr) / sizeof(arr[0]);
    sort(arr, len);
    for (int i = 0; i <=len-1; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

选择排序

优先确保最小值,从小到大 1.

#include <stdio.h>
void swap(int arr[], int m, int n)
{
    int temp = arr[m];
    arr[m] = arr[n];
    arr[n] = temp;
}
void sort_select(int arr[], int len)
{
    for (int i = 0; i < len - 1; i++)
    {
        for (int j = i+1; j < len; j++)
        {
            if (arr[i] > arr[j])
            {
                swap(arr, i, j);
            }
        }
    }
}
int main()
{
    int arr[10] = {10, 3, 2, 5, 7, 2, 9, 2, 1, 8};
    int len = sizeof(arr) / sizeof(arr[0]);
    sort_select(arr, len);
    for (int i = 0; i <= len - 1; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}
#include <stdio.h>
void swap(int arr[], int m, int n)
{
    int temp = arr[m];
    arr[m] = arr[n];
    arr[n] = temp;
}
void sort_select(int arr[], int len)
{
    for (int i = 0; i < len - 1; i++)
    {
        int k=i;
        for (int j = i+1; j < len; j++)
        {
            if (arr[k] > arr[j])
            {
                k = j;
            }
        }
        if(k!=i)
        {
            swap(arr, i, k);
        }
    }
}
int main()
{
    int arr[10] = {10, 3, 2, 5, 7, 2, 9, 2, 1, 8};
    int len = sizeof(arr) / sizeof(arr[0]);
    sort_select(arr, len);
    for (int i = 0; i <= len - 1; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}