• 十三、排序算法


    排序算法

    算法 一组乱序数据 变成有序数据------>排序 一类问题

    列 成绩从高到低排序 个子从高到低

    一类问题 可能会有不同的算法
    评判算法的好坏 时间复杂度 空间复杂度

    排序n个数据 --->时间和n的关系 空间和n的关系

    算法和编程语言 算法-->解决问题的方法 可以用c语言写代码 也可以用其他语言
    算法和数据结构 排序 数据进行排序 数据的存放方式 影响代码的实现效率


    数据结构 组织和存放数据的方式 作用 管理数据 --->影响操作方式
    算法 处理数据

    算法+数据结构 = 程序

    同一种算法 最后写出的代码也可能不一样

    1.冒泡 从头到尾比较相邻的元素 如果排序和要排序方式不一样 就交换两个元素
    经过一轮比较后会让最大的数字沉到末尾

    2.选择 每次从剩下的元素中找到最小的元素 和后面的文件进行交换

    3.插入 先把第一个数字视为优秀 后面一个个插入到有序的序列当中

    4.快速 知道一轮的步骤就行

    先选中一个数字 把比这个数字更大的放到右边 更小的放到左边
    把数组一分为2 ---->对两边再调用递归排序

    数组一分为2 对两边进行单独排序 ---->有序

    头文件进行函数声明

     1 #pragma once
     2 
     3 #include<stdio.h>
     4 
     5 void printArr(int arr[],int len);//参数是数组名和数组大小  打印一个数组里面所有内容
     6 
     7 void bulletSort(int arr[],int len);//冒泡排序定义
     8 
     9 void selectSort(int arr[],int len);//选择排序定义
    10 
    11 void insertSort(int arr[],int len);//定义插入排序
    12 
    13 void quickSort(int arr[],int left,int right);//快速排序
    sort.h

    sort.c函数的调用

     1 #include "sort.h"
     2 
     3 void printArr(int arr[],int len){
     4     int i;
     5     for (i=0;i<len;i++)
     6     {
     7         printf("%d	",arr[i]);
     8     }
     9     printf("
    ");
    10 }
    11 void bulletSort(int arr[],int len)
    12 {
    13     int i,j;
    14     for (i=0;i<len-1;i++)
    15     {//这里-i的目的是因为有一个数字沉底  这个数字不参与后续的比较
    16         for (j=0;j<len-i-1;j++)
    17         {
    18             if (arr[j]>arr[j+1])//前面比后面大
    19             {
    20                 int temp=arr[j];
    21                 arr[j]=arr[j+1];
    22                 arr[j+1]=temp;
    23             }
    24         }
    25     }
    26 }
    27 
    28 void selectSort(int arr[],int len)
    29 {
    30     int i,j,k,temp;;
    31     for (i=0;i<len-1;++i)
    32     {
    33         k=i;
    34         for (j=i+1;j<len;++j)
    35         {
    36             if (arr[j]<arr[k])
    37             {
    38                 k=j;//k保持最小元素的下标
    39             }
    40         }
    41         //用最小元素  arr[k] 和arr[i] 进行交换`
    42         temp=arr[k];
    43         arr[k]=arr[i];
    44         arr[i]=temp;
    45     }
    46 }
    47 
    48 void insertSort(int arr[],int len)//插入排序
    49 {
    50     int i,temp,j;
    51     for (i=1;i<len;++i)
    52     {
    53         temp=arr[i];
    54         j=i-1;
    55         while (j>=0&&arr[j]>temp)
    56         {
    57             arr[j+1]=arr[j];//把这个数据往后移动
    58             --j;
    59         }
    60         arr[j+1]=temp;//插入到第一个比他小的元素后面
    61     }
    62 }
    63 
    64 
    65 void quickSort(int arr[],int left,int right)
    66 {
    67     int i,j;
    68     int temp;
    69     if (left>=right) return;
    70     //排序的是[left,right]这个区间的元素
    71     //left>right 说明没有元素
    72     //left==right 只有一个元素  不需要排序
    73     //选中的数字是 arr[left] 把比这个元素大的 放右边  比他小的放左边
    74 
    75     //数组一份为2
    76     i=left;
    77     j=right;
    78     while (i<j)
    79     {
    80         while(i<j&&arr[left]<arr[j]) --j;
    81         while(i<j&&arr[left]>=arr[j]) ++i;
    82         if (i<j)
    83         {
    84             temp=arr[i];
    85             arr[i]=arr[j];
    86             arr[j]=temp;
    87         }
    88     }
    89     //当i==j时  i所在位置就是 arr[left]应该在的位置
    90     temp=arr[left];
    91     arr[left]=arr[i];
    92     arr[i]=temp;
    93     //对这两个部分单独排序
    94     quickSort(arr,left,i-1);
    95     quickSort(arr,i+1,right);
    96 }

    主方法  调用声明函数

     1 #include <stdio.h>
     2 #include "sort.h"
     3 int main()
     4 {
     5     int arr[10]={3,4,2,7,5,3,1,6,8,6};
     6     bulletSort(arr,10);
     7     selectSort(arr,10);
     8     insertSort(arr,10);
     9     quickSort(arr,0,9);
    10     printArr(arr,10);
    11     getchar();
    12     return 0;
    13 }
  • 相关阅读:
    day09
    初识socket
    java正则表达式
    Servlet 3.0 新特性详解
    spring利用PropertiesFactoryBean管理属性配置文件properties
    MyBatis获取插入记录的自增主键
    深入学习理解java-ThreadLocal
    Mybatis批量执行语句
    MyBatis使用二级缓存
    编码的理解
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/11808491.html
Copyright © 2020-2023  润新知