zoukankan      html  css  js  c++  java
  • c排序

     1 #pragma once//如果写头文件   放置头文件重复包含
     2 #include<stdio.h>
     3 
     4 //定义类型  结构体类型定义
     5 
     6 //宏定义  #define
     7 //函数申明
     8 
     9 void printArr(int arr[], int len);//参数数组名和数组大小 打印一个数组里面所有内容
    10 void bulletSort(int arr[], int len);//冒泡排序
    11 void selectSort(int arr[], int len);//选择排序
    12 void insertSort(int arr[], int len);//插入排序
    13 void quickSort(int arr[], int left, int right);//快速排序

    sort.c

     1 #include"sort.h"
     2 void printArr(int arr[], int len)
     3 {
     4     for (int i = 0; i < len; ++i)
     5     {
     6         printf("%d	", arr[i]);
     7     }
     8     printf("
    ");
     9 }
    10 void bulletSort(int arr[], int len)
    11 {
    12     int temp;
    13     for (int i = 0; i < len - 1; ++i)//循环操作的次数
    14     {
    15         //从前往后进行比较 顺序不合适交换位置
    16         for (int j = 0; j < len-1-i; j++)
    17         {    //这里-i的目的是因为  比较一轮之后有一数字沉底  这个数字不在参与后续的比较
    18             if (arr[j]>arr[j + 1])//前面比后面大  最后从小到大的顺序
    19             {
    20                 //交换两个元素的位置
    21                 temp = arr[j];
    22                 arr[j] = arr[j + 1];
    23                 arr[j + 1] = temp;
    24             }
    25         }
    26     }
    27 }
    28 void selectSort(int arr[], int len)//选择排序
    29 {
    30     //如果10个数据  选择9次
    31     int k,temp;
    32     for (int i = 0; i < len - 1; ++i)
    33     {
    34         //从生效的元素中选择一个最小的和arr[i]进行交换
    35         k = i;
    36         for (int j = i + 1; j < len; j++)
    37         {
    38             if (arr[j] < arr[k])
    39             {
    40                 k = j;//k保存最小元素的下标
    41             }
    42         }
    43         //用最小元素  arr[k] 和arr[i]交换
    44         temp = arr[k];
    45         arr[k] = arr[i];
    46         arr[i] = temp;
    47 
    48     }
    49 }
    50 void insertSort(int arr[], int len)
    51 {
    52     int temp,j;
    53     for (int i = 0; i < len; i++)//第一个元素 视为有序 后面的元素一个个插入进来
    54     {
    55         //一步一步插入的步骤
    56         temp = arr[i];
    57         j = i - 1;
    58         while (j >= 0 && arr[j]>temp)
    59         {
    60             arr[j + 1] = arr[j];//把这个数据往后拖
    61             j--;
    62         }
    63         arr[j + 1] = temp;
    64     }
    65         
    66 }
    67 void quickSort(int arr[], int left, int right)//排序[left,right]这个区间的元素
    68 {
    69     if (left >= right) return;//只有一个元素不排
    70     int temp, i = left, j = right;
    71     while (i<j)
    72     {
    73         while (i<j&&arr[j] >= arr[left]) --j;
    74         while (i<j&&arr[i]<arr[left]) ++i;
    75         if (i<j)
    76         {
    77             //交换arr[i] arr[j];
    78             temp = arr[i];
    79             arr[i] = arr[j];
    80             arr[j] = temp;
    81         }
    82     }
    83     //交换arr[i]和arr[left]
    84     temp = arr[i];
    85     arr[i] = arr[left];
    86     arr[left] = temp;
    87 
    88     quickSort(arr, left, i - 1);//排左边
    89     quickSort(arr, i + 1, right);//排右边
    90 }

    排序.c

     1 /*
     2 复习 预处理命令--------------------------
     3 1.宏定义
     4     #define PI 3.141592654 文本替换 替换常用内容
     5     #define ADD(a,b) ((a)+(b)) 带参数的文本替换 防止替换之后优先级出现问题
     6 2.头文件包含
     7     #include<头文件>  如果系统自带  那么用<>
     8     #include"头文件"  如果自己写    那么用" "
     9 
    10         你需要用到什么样的函数 需要#include 去包含它的头文件
    11 
    12         目的  函数--->拆成多个文件 拆开之后如何使用
    13 3.条件编译
    14     通过宏去判断使用的字符集
    15     通过宏 判断用的什么环境....
    16     #ifndef 宏
    17 
    18     #endif
    19     #if 0
    20     #endif
    21 新内容 排序算法--------------------------
    22 
    23     算法 一组乱序数据  变成有--->排序  一类问题
    24 
    25         成绩从高到低排序
    26         百度  根据热度进行排序(广告投放)
    27 
    28         一类问题  可能不止有一种算法
    29             评判算法的好坏 时间复杂度和空间复杂度
    30                 
    31                 需要排序100个数据  排序10个数据
    32 
    33             排序n个数据  --->时间和n的关系   空间和n的关系
    34 
    35         算法和编程语言  算法-->方法  可以用c原因写代码  也可以是其他语言
    36         算法和数据结构  排序   数据进行排序  数据的存放方式  影响代码的实现和效率
    37             int a,b,c;
    38             int arr[3];
    39 
    40         数据结构  组织和存放数据的方式    作用 管理数据  --->影响操作方式
    41             算法  处理数据
    42 
    43             算法+数据结构
    44 
    45     同一种算法  最后写出的代码可能不一样
    46 1.冒泡  从头到尾比较练歌相邻的元素  如果顺序和要排序的方式不一样 就交换
    47 两个元素        比较一轮之后会让最大的数字沉底
    48 2.选择 每次从剩下的元素中找到最小的 和前面的元素进行交换
    49 3.插入
    50 4.快速
    51 
    52 从小到大的方式进行排序
    53 */
    54 
    55 #include<stdio.h>
    56 #include"sort.h"
    57 int main()
    58 {
    59     int arr[10] = { 3, 2, 8, 9, 1, 4, 4, 6, 7, 1 };
    60     //bulletSort(arr, 10);//冒泡排序
    61     //selectSort(arr, 10);//选择排序
    62     //insertSort(arr, 10);//插入排序
    63     quickSort(arr,0, 9);//快速排序
    64     printArr(arr, 10);//输出
    65     getchar();
    66     return 0;
    67 }
  • 相关阅读:
    [Linux/wine.笔记]关于WINE(Linux上运行Windows程序的兼容层)
    [docker.笔记]常用命令
    [技巧.DotNet]超级好用的动态对象ExpandoObject
    .net core 的窗体设计器进展(.NET Core Windows Forms designer),5月中旬或将发布成熟版!
    [问题记录.Oracle/odp.net]托管ODP中,连接池的连接验证参数(validate connection=true)无效?
    [JWT]Json Web Token 备忘
    [MQ]RabbitMQ的概要介绍及消息路由规则
    常见排序算法
    C语言数值存储溢出探讨
    从计算理解数组
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/10612291.html
Copyright © 2011-2022 走看看