zoukankan      html  css  js  c++  java
  • Insertion Sort

    Insertion Sort

    Write a program of the Insertion Sort algorithm which sorts a sequence A in ascending order. The algorithm should be based on the following pseudocode:

    for i = 1 to A.length-1
        key = A[i]
        /* insert A[i] into the sorted sequence A[0,...,j-1] */
        j = i - 1
        while j >= 0 and A[j] > key
            A[j+1] = A[j]
            j--
        A[j+1] = key
    

    Note that, indices for array elements are based on 0-origin.

    To illustrate the algorithms, your program should trace intermediate result for each step.

    Input

    The first line of the input includes an integer N, the number of elements in the sequence.

    In the second line, N elements of the sequence are given separated by a single space.

    Output

    The output consists of N lines. Please output the intermediate sequence in a line for each step. Elements of the sequence should be separated by single space.

    Constraints

    1 ≤ N ≤ 100

    Sample Input 1

    6
    5 2 4 6 1 3
    

    Sample Output 1

    5 2 4 6 1 3
    2 5 4 6 1 3
    2 4 5 6 1 3
    2 4 5 6 1 3
    1 2 4 5 6 3
    1 2 3 4 5 6
    

    Sample Input 2

    3
    1 2 3
    

    Sample Output 2

    1 2 3
    1 2 3
    1 2 3
    

    Hint

    Template in C

    注意: 每行最后不要输出多余空格

    #include <iostream>
    using namespace std;
    const int MAX = 110;
    int a[MAX];
    void insertionSort(int a[], int n)
    {
    	int key, j;
    	for(int i = 1; i < n; ++ i)
    	{
    		key = a[i];
    		j = i - 1;
    		while(a[j] > key && j >= 0)
    		{
    			a[j + 1] = a[j];
    			j --;
    		}
    		a[j + 1] = key;
    		for(int k = 0; k < n; ++ k)
    		{
    			if(k == n - 1)
    				cout << a[k];
    			else
    				cout << a[k] << " ";
    		}
    		cout << endl;
    	}
    	return ;
    }
    int main()
    {
    	int n;
    	cin >> n;
    	for(int i = 0; i < n; ++ i)
    	{
    		cin >> a[i];
    	}
    	for(int i = 0; i < n; ++ i)
    	{
    		if(i == n - 1)
    			cout << a[i];
    		else
    			cout << a[i] << " ";
    	}
    	cout << endl;
    	
    	insertionSort(a, n);
    	
    	return 0;
    } 
    

      

  • 相关阅读:
    学习subprocess模块...
    【排列组合】
    【约瑟夫问题】
    【craps赌博游戏】
    【洗扑克牌(乱数排列)】
    【最大访客数】
    【后序式的运算】
    【中序式转后序式】
    【python基础】之元组 集合 字典
    【费式数列(Fibonacci数列)】
  • 原文地址:https://www.cnblogs.com/mjn1/p/10702023.html
Copyright © 2011-2022 走看看