首页 > 编程语言 >排序算法(c语言版)

排序算法(c语言版)

时间:2024-04-11 11:36:14浏览次数:25  
标签:arr int void len gap 算法 排序 语言版

排序算法(c语言版)

1、插入排序

#include<stdio.h>

//插入排序,升序
void insertion_sort(int arr[], int len){
        int i,j,key;
        for (i=1;i<len;i++){
                key = arr[i];//arr[i]为待插入的元素,保存在key中
                j=i-1;
                while((j>=0) && (arr[j]>key)) {//满足条件的话,将前一元素向后移位
                        arr[j+1] = arr[j];
                        j--;
                }
                arr[j+1] = key;//将key插入到其中
        }
}


//降序排列
void insert_sort(int arr[],int len){
    int i,j,key;
    for(i=1;i<len;i++){
        key=arr[i];
        j=i-1;
        while((j>=0)&&arr[j]<key){
            arr[j+1]=arr[j];
            j--;
        }
        arr[j+1]=key;
    }
}

int main(){
    int arr[10]={1,22,11,843,29,27,183,18,28,9};
    int *p=&arr;
    int len=sizeof(arr)/sizeof(int);
    insertion_sort(p,len);
    for(int i=0;i<10;i++){
        printf("%d  ",p[i]);
    }
    printf("\n");
    insert_sort(p,len);
    for(int i=0;i<10;i++){
        printf("%d  ",p[i]);
    }
}

2、选择排序

#include <stdio.h>

void swap(int *a,int *b) //交换位置
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
//选择排序
void select(int arr[], int len){
    int i, j;
    for (i = 0; i < len-1; i++){
        int min = i;//最小元素下标
        for (j = i + 1; j < len; j++){
            if (arr[j] < arr[min]){
                min = j;    //将最小元素下标给min
            }
        }

       swap(&arr[min], &arr[i]); //交换两者位置
    }
}

int main(){
    int arr[10]={1,22,11,843,29,27,183,18,28,8};
    int *p=&arr;
    int len=sizeof(arr)/sizeof(int);
    select(p,len);
    for(int i=0;i<10;i++){
        printf("%d  ",p[i]);
    }
}

3、快速排序

#include<stdio.h>


//快速排序
void quick_sort(int a[],int l,int r){//l为左边界,r为右边界

    if(l<r){
        int i,j,x;

        i=l;
        j=r;
        x=a[i];//x为基准
        while(i<j){
            while(i<j&&a[j]>x){//找小于x的元素
                j--;
            }
            if(i<j) a[i++]=a[j];
            while(i<j&&a[i]<x){//找大于x的元素
                i++;
            }
            if(i<j) a[j--]=a[i];
            

        }
        a[i]=x;
        quick_sort(a,l,i-1);
        quick_sort(a,i+1,r);
    }
}

int main(){
    int ar[10]={1,22,11,843,29,27,183,18,28,8};
    int *p=&ar;
    int len=sizeof(ar)/sizeof(int);
    quick_sort(p,0,len);
    for(int i=0;i<10;i++){
        printf("%d  ",p[i]);
    }
}

4、插入排序

#include<stdio.h>

void shell_sort(int a[],int len){

    int i,j,gap;//gap为步长

    for(gap=len/3;gap>0;gap/=3){//gap为数组长度的1/3

        for(i=0;i<gap;i++){
            for(j=i+gap;j<len;j+=gap){
                if(a[j]<a[j-gap]){
                    int tmp = a[j];
                    int k = j - gap;
                    while (k >= 0 && a[k] > tmp)
                    {
                        a[k + gap] = a[k];
                        k -= gap;
                    }
                    a[k + gap] = tmp;
                }
            }
        }

    }
}



int main(){
    int arr[10]={1,22,11,843,29,27,183,18,28,8};
    int *p=&arr;
    int len=sizeof(arr)/sizeof(int);
    shell_sort(p,len);
    for(int i=0;i<10;i++){
        printf("%d  ",p[i]);
    }
}

标签:arr,int,void,len,gap,算法,排序,语言版
From: https://www.cnblogs.com/cgl-dong/p/18128655

相关文章

  • Capl语言 CRC算法大全
    CRC网站CRC计算器(好用)CRC16-CCITTwordCRC_16_CCITT(bytedata[],bytelen){stackinti=0;stackintindex=0;wordcrc16=0x0000;while(len--){for(i=0x80;i!=0;i>>=1){if((crc16&0x8000)!=0){......
  • 数据结构与算法引言
    数据结构与算法引言数据结构和算法是计算机专业重要的基础课程。数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法简单来说就是解决问题的步骤。有了一个个数据结构和算法,我们可以编写出高质量的代码,高性能的产品。数据结构数......
  • C语言简单的数据结构:单链表的有关算法题(1)
    算法题重点在于思路,代码其实并不难,这里的每一题都提供多种思路,大家可以动手写一下,并找到更好的解题方法这里先介绍前三道题目:1.单链表相关经典算法OJ题1:移除链表元素2.单链表相关经典算法OJ题2:反转链表3.单链表相关经典算法OJ题4:链表的中间结点1.单链表相关经典算......
  • 记录一个springcloud-task-core.jar导致CommandLineRunner @order排序失效的问题
    项目中编写了几个CommandLineRunner,并且加上了spring的@order注解,期望在启动时会按顺序执行(从order的value小到大执行),但是实际使用发现排序不生效于是进行debug,CommandLineRunner类的排序是在SpringApplication.class的callRunners方法privatevoidcallRunners(ApplicationCon......
  • 算法模板 v1.12.2.20240411
    算法模板v1.1.1.20240115:之前历史版本已不可寻,创建第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”;删除“编译”-“手动开O优化”;修改“编译”-“CF模板”;删除“读写”;删除“图论”-“欧拉图”-“混合图”;删除“图论”-“可达性统计”;删除“数据类型”-“高精类”。......
  • GPS轨迹压缩之Douglas-Peucker算法
    前言最近在做的IOT平台涉及到画轨迹线的业务。谈到轨迹线,设备上报上来的数据量巨大,甚至活跃的设备一天上报来的数据都甚至几十万。前端没法对这个数据去处理进行画线取轨迹图像。所以就有了轨迹压缩。轨迹压缩算法轨迹压缩算法分为两大类,分别是无损压缩和有损压缩,无损压缩算法......
  • Java List集合去重、过滤、分组、获取数据、求最值、合并、排序、跳数据和遍历
    前言请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、准备工作:现有一个User类、Student类和Ticket类,加入相关依赖@DatapublicclassUser{/***id*/privateIntegerid;/***姓名*/privateStringname;/**......
  • 排序法:选择、冒泡、插入和快排
    排序方法指的是对一个无序的数列,按照一定方法让其变得有序。排序法重点是思维过程,本文中的四种排序方法都较为基础,但其中蕴含的算法思维各不相同,适合作为算法入门学习内容。选择排序法我认为选择排序法是较符合一般人思维模式的排序法,它是指对于每个数列,从其中找出最小的一个数......
  • (Java)数据结构——排序(第一节)堆排序+PTA L2-012 关于堆的判断
    前言本博客是博主用于复习数据结构以及算法的博客,如果疏忽出现错误,还望各位指正。堆排序(HeapSort)概念堆排序是一种基于堆数据结构的排序算法,其核心思想是将待排序的序列构建成一个最大堆(或最小堆),然后将堆顶元素与最后一个元素交换,再将剩余元素重新调整为最大堆(或最小堆),重复......
  • 【科研相关知识】Dijkstra算法
    Dijkstra算法相关背景知识历史来源exampleDijkstra算法相关背景知识Dijkstra算法是解决图论中的最短路径问题而最短路径问题是在图中找到两个节点之间的最短路径在导航中确定路线最短,在网络中路由器使用Dijkstra算法确定最短路径和转发端口。最短路径算法有Dijkstra算......