zoukankan      html  css  js  c++  java
  • 直接插入排序

    思想:(见图)


    方法一:

    直接上代码:

    void InsertSort(int *a,int size)
    {
    	assert(a);
    	int i, j, tmp;
    	for (i = 0; i < size-1; ++i)
    	{
    		tmp = a[i + 1];
    		for (j = i; j >= 0; --j)   //在有序序列中插入后来数
    		{
    			if (a[j] > tmp)
    			{
    				a[j+1] = a[j];
    			}
    			else
    			{
    				break;
    			}
    		}
    		a[j+1] = tmp;//原来时上边的J最后又减了一个
    	}
    }
    方法二:

    其实是一个有问题的程序,因为出现数组下标是负数了,源于功能能实现,所以摆放于此

    //很可笑的一个问题
    void InsertSort(int *a,int size)
    {
    	assert(a);
    	int i, j, tmp;
    	for (i = 0; i < size-1; ++i)
    	{
    		tmp = a[i + 1];
    		for (j = i; j >= -1; --j)
    		{
    			if (a[j] > tmp)          //[j] j尽然成负数了
    			{
    				a[j+1] = a[j];
    			}
    			else
    			{
    				a[j + 1] = tmp;
    				break;
    			}
    			
    		}
    	}
    }
    方法三:

    //下面就是对的
    void InsertSort(int a[], int len)
    {
    	int i, j, temp;
    	for (i = 1; i<len; i++)
    	{
    		if (a[i]<a[i - 1])
    		{
    			temp = a[i];
    			for (j = i - 1; a[j]>temp; j--)
    				a[j + 1] = a[j];
    			a[j + 1] = temp;
    		}
    	}
    }

    方法四:

    end为有序序列最后一个元素下标

    void InsertSort(int *a, int size)
    {
    	assert(a);
    	for (int i = 1; i < size; ++i)
    	{
    		int index = i;
    		int tmp = a[index];
    		int end = index - 1;
    		while (end >= 0 && tmp < a[end])
    		{
    			a[end + 1] = a[end];
    			--end;
    		}
    		a[end + 1] = tmp; //这里end加一是因为上边多减得一个
    	}
    }




  • 相关阅读:
    操作系统面试题(四)
    计算机网络面试题(三)
    redis和mongodb面试题(一)
    MySQL面试题(二)
    数据库基础面试题(一)
    RoBERTa模型总结
    BERT模型总结
    动态规划-Dynamic Programming(DP)
    XGBoost原理学习总结
    re模块的使用
  • 原文地址:https://www.cnblogs.com/melons/p/5791867.html
Copyright © 2011-2022 走看看