插入排序

6 篇文章 1 订阅
1 篇文章 0 订阅

Getting Started - Insertion Sort
  
 "
时间限制    1 秒/Second(s)    内存限制    128 兆字节/Megabyte(s)
提交总数    181    正确数量    105
裁判形式    标准裁判/Standard Judge    我的状态    尚未尝试
难度        分类标签    STL 排序
题目描述
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.

输入
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.

输出
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.
样例输入复制
6
5 2 4 6 1 3
样例输出复制
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
提示
1 ≤  N ≤  100

 

# include <bits/stdc++.h>
using namespace std  ;

int a[101]; 
int n ; 

void output(){

    for(int i=0; i < n ; i++){
        if(i+1 != n )
        cout<<a[i]<<" ";
        else
        cout<<a[i]<<endl;
    }
}
void InsertSort(){
    //由于插入排序默认第一个数a[0] 为已经排好序的序列,对剩余数进行排序 temp是要插入的数 
    for(int i = 0 ; i < n-1 ; i++){    
        int temp = a[i+1];
        //进行插入排序  每次跟已经排好序的数组元素进行比较 
        for(int j = i ;j >= 0 ;j-- ){
            //如果比a[j]小,将a[j]向后移动 
            if(temp < a[j]){
                a[j+1] = a[j];
                a[j]=temp;
            }else{
                break;
            }    
        }
        //输出数组 
        output();
    }
     
}

main(){
    
    cin>>n ;
    //输入初始数组 
    for(int i = 0 ; i<n ;i++){
        cin>>a[i];    
    }
    //输出数组 
    output();
    //插入排序 
    InsertSort();
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值