插入排序法---题目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序法---题目相关的知识,希望对你有一定的参考价值。

题目内容:

實作插入排序法讓一個序列的數字遞增,並輸出數字總共交換了幾次。

比如說一個序列1 3 7 9 2,前四個數字都已經排好了,這時候第五個數字2進來,他必須跟9,7,3交換使得序列變成1 2 3 7 9。這個數字2的交換次數就是3次。

 

 

输入格式:

 

輸入第一行為一個數字T,代表測試資料的筆數。接下來有T筆測資,每筆測資第一行為一個正整數N,表示這筆測資有N個數字。每筆測資的第二行會有N個數字,每個數字間以空格隔開。

數字範圍:

0 < N <= 100

0 <= 序列內的數字 <= 1000000

 

输出格式:

 

輸出一行數字,將每筆測資的答案加總後輸出。

 

输入样例:

 

3

5

5 4 3 2 1

3

1 2 3

6

1 3 5 2 4 6

 

 

输出样例:

13

 

时间限制:500ms内存限制:32000kb
 
实现代码:
 1 #include <stdio.h>
 2 
 3 int sort(int *,int n); 
 4 
 5 int main(void){
 6     int arr[100];
 7     int t,n; 
 8     int sum = 0;    
 9     int i,j;
10     
11     scanf("%d\n",&t);
12     for(i = 1; i<=t;i++){
13         scanf("%d\n",&n);
14         
15         for(j = 0;j<n;j++){
16             scanf("%d",&arr[j]);
17         }
18         
19         sum +=sort(arr,n);
20     }
21     
22     printf("%d\n",sum);
23     return 0;     
24 }
25 
26 int sort(int *p,int n){
27     int i,j,key,count = 0;
28 
29     for(i = 1; i < n ;i++){
30         key = p[i];    
31         for(j=i; j>0 && p[j-1]>key; j--){
32             p[j] = p[j-1];
33             count++;
34         }
35         p[j] = key;
36     }
37 
38     return count;
39 }

 

以上是关于插入排序法---题目的主要内容,如果未能解决你的问题,请参考以下文章

选择和插入排序

[4] 算法之路 - 插入排序之Shell间隔与Sedgewick间隔

面试之插入排序算法

对链表进行插入排序

C++编程基础题解:插入排序

[2] 算法之路 - 选择之堆排序