zoukankan      html  css  js  c++  java
  • 纯手撸——直接插入排序

    数据结构复习的最后一章节,给自己个小目标一礼拜内完纯手撸完考纲必考排序的代码,保持独立思考。


    首先是直接插入排序,顺一遍步骤:

    • 假设给定数组(整型)第一个元素有序
    • 从第二个元素开始,与自己左边的第一个元素比较,如果比自己小,则不动;如果比自己大,就与自己左边的第二个元素比较;直到遇到不比自己大的元素,在其右边插入
    • 选取后面的元素,依次重复第二步
    #include<stdio.h>
    //后面为了测试写的输出,输出每一次排序后的信息。这是后面补上的,方便观察,必须放在InsertSort方法前 
    void print(int a[], int n ,int i){
        printf("%d:",i);
        for(int j=0; j<8; j++){ //这里可自行修改
            printf("%d",a[j]);
        }
        printf("
    ");
    }
    
    //直接插入排序 
    void InsertSort(int a[],int n){ //a为要排序的数组,n为元素总个数 (即长度)
    	for(int i=1;i<n;i++){ //默认第一个元素有序,故i从地址下标1处开始循环
    		if(a[i]<a[i-1]){ //第i个元素大于i-1元素,不动;反之,要找适当位置插入 
    			int j=i-1; //j指向i的左边第一个元素
    			int tmp=a[i]; //临时存储待插入元素
    			while(j>-1&&tmp<a[j]){ //找要插入的位置 
    				a[j+1]=a[j]; //数组元素后移一个位置,这是为了给待插入元素腾出位置 
    				j--; 
    			} 
    			a[j+1]=tmp; //插入正确的位置,即最后比较不比自己大的元素的右边 
    		}
    		print(a,n,i);//打印每次排序后的结果 
    	}
    }
    
    //测试 
    int main(){
    	int a[8]={3,1,7,5,2,4,9,6}; //预计 1 2 3 4 5 6 7 9
    	InsertSort(a,8);
    } 
    

    复盘一下:

    void InsertSort(int a[],int n)
    {
    	for(int i=1;i<n;i++) 
    	{
    		if(a[i]<a[i-1])
    		{	
    			int j=i-1;
    			int tmp=a[i];
    			for (;j>0&&tmp<a[i];j--)
    			{
    				a[j+1]=a[j]; //后移
    			}
    			a[j+1]=tmp; //插入
    		}
    	}
    }
    
  • 相关阅读:
    隐马尔科夫模型
    计算复杂性理论——函数
    STM32硬件I2C调试
    FPGA简单图像处理
    STM32配置使用外部12MHz晶振
    STM32从模式接受数据
    STM32 I2C读写EEPROM(中断模式)
    STM32 I2C读写EEPROM(POLLING模式)
    STM32串口实验
    STM32使用TIM闪烁LED——PWM方式
  • 原文地址:https://www.cnblogs.com/wangzheming35/p/13445231.html
Copyright © 2011-2022 走看看