C++ 排序的理解 (选择排序,插入排序)

#include<stdio.h>
#include <iostream>
using namespace std;
//选择排序的理解:每次循环n-1次,每一次找出一个最大或者最小的值并记录,当每次循环结束时,将找到的值放在末尾或者首部,然后继续循环
void swap(int *a, int *b) //元素交换
{
        int temp = 0;
        temp = *a;
        *a = *b;
        *b = temp;
}

int main()
{
    int a[4] = { 23, 20, 13, 22};  //定义一个int类型数组

    //选择排序 
    for (int i = 0; i <4; i++)
    {
        int min1 = i;  //定义一个变量赋值为i,表示当前循环中最小的值的下标,表示最小值在数组中所对应的的位置下标
        for (int j = i + 1; j < 4; j++)  //定义一个for循环,j的初始值为当前循环的第二个元素
        {
            if (a[j] < a[min1])//每一次循环,拿当前循环中第二个元素与后面的元素进行对比,如果发现比后面的元素小,则记录当前较小元素所在的数组下标,并赋值给min1
            {
                min1 = j;
            }         
        }
        if (min1 != i) 
            //当循环结束发现min的值并不是最后一个值时,则将当前循环中最小的值,与当前循环中的第一个元素的值进行交换。如果
            //如果当前的min1存储的值是最后一次循环的值,并且未发生改变,则表示该数值已经是最大,则表示排序已经完成,直接跳出循环
        {
            swap(&a[min1], &a[i]);

        }
    }


    
    return 0;
}

 

插入排序

#include<stdio.h>
#include <stdlib.h>
#include <time.h>



int*  insert(int * p)
{
    int i; 
    int j;
    int temp; //定义一个基准值 
    for (i = 1; i < 10; i++)
    {
        temp = p[i];  //
        j = i - 1;
    
        while (j >= 0 && p[j]>temp)  //如果当前值大于0 并且基准值小于当前的值,则将元素像后挪
        {
            p[j + 1] = p[j];
            j--;
        }
        p[j + 1] = temp;  
    }

    for (int i = 0; i < 10; i++)
    {
      printf("%d ",p[i]) ;
    }
    return p;
}


int main()
{

    int arr[10] = { 0 };
    srand((unsigned)time(NULL));

    for (int i = 0; i < 10; i++)
    {
        arr[i] = rand() % 10;
    }
    int* arr1=insert(arr);

    return  0;
}

 

posted @ 2020-03-17 14:35  神迹丶  阅读(432)  评论(0编辑  收藏  举报
网站已运行: