• 插入排序


    有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置

    #include <iostream>
    using namespace std;
    
    void InsertSort(int array[], int length)
    {
    	int i, j, key;
    	for(i = 1; i < length; i++)
    	{
    		key = array[i];
    		// 把i之前大于array[i]的数据向后移动
    		for (j = i - 1; j >= 0 && array[j] > key; j--)
    		{
    			array[j + 1] = array[j];
    		}
    		// 在合适位置安放当前元素
    		array[j + 1] = key;
    	}
    }
    
    int main()
    {
    	int array[100] = {0};
    	int n, i;
    	cin >> n;
    	for (i = 0; i < n; i++)
    	{
    		cin >> array[i];
    	}
    	InsertSort(array, n);
    	for (i = 0; i < n; i++)
    	{
    		cout << array[i] << " ";
    	}
    	cout << endl;
    	return 0;
    }

    折半插入排序:

    #include <iostream>
    using namespace std;
    
    void BinInsertSort(int array[], int length)
    {
    	int i, j, key, low, high, mid;
    	for(i = 1; i < length; i++)
    	{
    		key = array[i];
    		low = 0;
    		high = i - 1;
    		while (low <= high)
    		{
    			mid = (low + high) / 2;
    			if(key < array[mid])
    			{
    				high = mid - 1;
    			}
    			else
    			{
    				low = mid + 1;
    			}
    		}
    
    		// 把i之前大于array[i]的数据向后移动
    		for (j = i - 1; j >= low; j--)
    		{
    			array[j + 1] = array[j];
    		}
    		// 在合适位置安放当前元素
    		array[low] = key;
    	}
    }
    
    int main()
    {
    	int array[100] = {0};
    	int n, i;
    	cin >> n;
    	for (i = 0; i < n; i++)
    	{
    		cin >> array[i];
    	}
    	BinInsertSort(array, n);
    	for (i = 0; i < n; i++)
    	{
    		cout << array[i] << " ";
    	}
    	cout << endl;
    	return 0;
    }



    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    printf打印输出null问题的跟踪
    一个需求的反思
    编写可测试的代码
    编写高质量代码_改善C++程序的150个建议 读书笔记
    GetDlgItem的用法小结
    引用作为函数返回值的一点思考
    LoadRunner 使用介绍
    撰写技术文章的注意事项
    NetLimiter网速测试小坑
    需求管理和开发的一点小思考
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834963.html
Copyright © 2020-2023  润新知