插入排序
作者:互联网
插入排序
介绍:
插入排序(英语:Insertion sort)是一种简单直观的排序算法。它的工作原理为将待排列元素划分为“已排序”和“未排序”两部分,每次从“未排序的”元素中选择一个插入到“已排序的”元素中的正确位置。
性质
稳定性
插入排序是一种稳定的排序算法。
时间复杂度
插入排序的最优时间复杂度为 O(n),在数列几乎有序时效率很高。
此时仅仅遍历了一遍数列。
插入排序的最坏时间复杂度和平均时间复杂度都为O(n^2) 。
#include<bits/stdc++.h>
#define N 105
int a[N];
void Input(int *a,int n){
int i;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
}
void Print(int *a,int n){
int i;
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
}
//读入一个元素,把它往前找,与前面的元素依次比较,放到合适的位置,进而保证前面的都是有序的数列,依次对数列中所有元素进行此操作可以保证数列有序
void insertion_sort(int* a, int n) {
for (int i = 1; i < n; ++i) {
int key = a[i];
int j = i - 1;
while (j >= 0 && a[j] > key) {
a[j + 1] = a[j];
--j;
}
a[j + 1] = key;
}
}
void InsertSort(int a[], int n)
{
for(int i= 1; i<n; i++){
if(a[i] < a[i-1]){//若第 i 个元素大于 i-1 元素则直接插入;反之,需要找到适当的插入位置后在插入。
int j= i-1;
int x = a[i];
while(j>-1 && x < a[j]){ //采用顺序查找方式找到插入的位置,在查找的同时,将数组中的元素进行后移操作,给插入元素腾出空间
a[j+1] = a[j];
j--;
}
a[j+1] = x; //插入到正确位置
}
}
}
int main(void){
int n,i;
scanf("%d",&n);
Input(a,n);
insertion_sort(a,n);
Print(a,n);
InsertSort(a,n);
Print(a,n);
return 0;
}
运行展示:Comparison Sorting Visualization (usfca.edu)
标签:int,插入排序,元素,复杂度,排序,void 来源: https://www.cnblogs.com/abldy/p/16323907.html