首页 > 其他分享 >折半插入排序

折半插入排序

时间:2023-12-02 14:33:48浏览次数:48  
标签:折半 Name NO int 插入排序 low data Age

ACC==1升序,ACC==-1降序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
    int NO;
    int Age;
    char Name[50];
}Student;

typedef struct{
    int StudentCount; 
    Student *data;
}Sqlist;

void Binsersort(Sqlist &L,int ACC)
{
    int i,j,k,low,high,mid;
    if(ACC==1)                    //升序 
    {
        for(i=1;i<L.StudentCount;i++)
        {
            k=L.data[i].NO;
            j=i-1;
            low=0;
            high=i-1;
            while(low<=high)
            {
                mid=(low+high)/2;
                if(L.data[mid].NO>k)
                    high=mid-1;
                else
                    low=mid+1;
            }
            for(j=i-1;j>=low;j--)
                L.data[j+1].NO=L.data[j].NO;
            L.data[low].NO=k;
        }
    }
    if(ACC==-1)                        //降序 
    {
        for(i=1;i<L.StudentCount;i++)
        {
            k=L.data[i].NO;
            j=i-1;
            low=0;
            high=i-1;
            while(low<=high)
            {
                mid=(low+high)/2;
                if(L.data[mid].NO<k)
                    high=mid-1;
                else
                    low=mid+1;
            }
            for(j=i-1;j>=low;j--)
                L.data[j+1].NO=L.data[j].NO;
            L.data[low].NO=k;
        }
    }
}

int main()
{
    Sqlist L;
    L.StudentCount=4;
     L.data = (Student *)malloc(L.StudentCount * sizeof(Student));
    L.data[0].Age=20;
    strcpy(L.data[0].Name,"zhangsan");
    L.data[0].NO=1115;
    L.data[1].Age=20;
    strcpy(L.data[1].Name,"lisi");
    L.data[1].NO=1112;
    L.data[2].Age=20;
    strcpy(L.data[2].Name,"wanger");
    L.data[2].NO=1113;
    L.data[3].Age=20;
    strcpy(L.data[3].Name,"mazi");
    L.data[3].NO=1114;
    
    Binsersort(L,-1);
    for (int i = 0; i < L.StudentCount; i++) {
        printf("NO: %d, Age: %d, Name: %s\n", L.data[i].NO, L.data[i].Age, L.data[i].Name);
    }
    return 0;
}

 

标签:折半,Name,NO,int,插入排序,low,data,Age
From: https://www.cnblogs.com/simpleset/p/17871561.html

相关文章

  • 直接插入排序
    01234528123      从下标1开始遍历,默认第一个元素是已排序序列。例如对元素3进行插入排序:下标0-3分别是2-5-8-12;此时k=arr[4]=3;j=i-1=3;从后往前遍历找到k应该插入的位置当while循环条件 j>=0&&arr[j]>k 一直成立时,arr[j+1]=ar......
  • [Luogu] P7910 [CSP-J 2021] 插入排序
    [CSP-J2021]插入排序-洛谷昨天下午爆肝一下午都没整出来(悲是我太菜了思路第一种想法,暴力即,每次修改操作后重新维护整个数组,时间复杂度\(O(Qn^2)\),能拿52pts但是,想要拿满分,很简单,只需要把排序的双层循环\(n^2\)变为\(n\)即可因为冒泡是对每个点都进行枚举,但是需要修改的......
  • C++简单插入排序
    voidinsertSort(inta[],intlen){ inti,j,temp; if(len==1)return; for(i=1;i<len;i++){ if(a[i]<a[i-1]){ temp=a[i]; for(j=i-1;j>=0&&a[j]>temp;j--){ a[j+1]=a[j]; }a[j+1]=temp; ......
  • 二分(折半查找)详细解答(边界条件终止条件等等详细解释)
    刷Leetcode总能遇到关于二分的题目,但是之前也只是草草地了解一下,每次在使用的时候都需要找模板,要不然就需要对于边界条件进行调试,着实是很麻烦!!!二分介绍:首先来简单介绍一下二分:二分查找也称折半查找(BinarySearch),它是一种效率较高的查找方法。但是,折半查找要求 线性表 必须......
  • 2008秋-计算机软件基础-直接插入排序
    //==============================================//直接插入排序(StraightSelectionSort)//Author:emanlee//直接插入排序c语言源程序//==============================================#defineN5#include<stdio.h>//显示元素voidDisplay(inta[],intelem......
  • 插入排序
    目录目录目录算法代码流程图算法将待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个未排序元素插入有序序列的适当位置。就像给一副扑克牌排序,先取第一张作为排序的开始,再从剩下的牌中取第二张,并......
  • 运用递归学习新知识——插入排序
    还是老样子,先讲一下插入排序的一个概念,比如校合唱团要按身高排队,从左到右由矮到高,小糖同学左边的同学已经按照身高站好了,右边还很乱,于是团长小蓝姐姐想了一个办法,她叫小糖同学往左看,小糖同学左边第一位叫男低1号,左边第二位叫男低2号,右边第一位叫男高1号,右边第二位叫男高2号,以此类......
  • 二分查找又称折半查找(Binary Search)
    ⛩️博主主页:@威化小餅干......
  • 希尔排序:优化插入排序的精妙算法
    排序算法在计算机科学中扮演着重要的角色,其中希尔排序(ShellSort)是一种经典的排序算法。本文将带您深入了解希尔排序,包括其工作原理、性能分析以及如何使用Java进行实现。什么是希尔排序?希尔排序,又称“缩小增量排序”,是插入排序的一种改进版本。它的核心思想是通过逐步缩小增量值......
  • 折半(二分)查找算法—高效搜索算法
    折半查找算法(BinarySearchAlgorithm)是一种高效的搜索算法,常用于已排序的数组或列表中进行查找操作。它的核心思想是通过比较中间元素与目标值的大小关系来确定目标值在数组的哪一部分,从而缩小搜索范围。本文将详细介绍折半查找算法的原理、实现以及应用场景。一、原理折半查找算......