排序算法02:插入排序

来源:互联网 发布:活着电影 知乎 编辑:程序博客网 时间:2024/06/07 02:27

插入排序(InsertionSort)时间复杂度O(N2)

#include "InsertionSort.h"#include "Print.h"// 插入排序算法void InsertionSort(int A[], int N){int j, P;int Tmp;for(P = 1; P < N; P++) // 每增加一个新的数,就依次与前面的数比较,插入到前面已经排好序的数列中,相应的位置后移{Tmp = A[P];for(j = P; j > 0 && A[j-1] > Tmp; j--) // 每次循环保证前面P个都是排好序的{A[j] = A[j-1];}A[j] = Tmp;//printf("(%d, %d) ", P, j);//Print(A, N);}}


主文件main.cpp

#include "InsertionSort.h"#include "SelectionSort.h"#include "ShellSort.h"#include "MergeSort.h"#include "HeapSort.h"#include "Print.h"#include <time.h>#define N 10000int main(){int A[10] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};int B[N];FILE *fp = fopen("data.txt", "r");for(int i = 0; i < N; i++){fscanf(fp, "%d", &B[i]);}clock_t start = clock();// 计时开始// 插入排序Time = 327msInsertionSort(B, N);// 选择排序Time = 967ms// SelectionSort(B, 10000);// 希尔排序Time = 10ms//ShellSort(B, 10000);// 归并排序Time = 27ms//MergeSort(B, N, 0, N - 1);// 堆排序Time = 4694ms//HeapSort(B, N);clock_t stop = clock();// 计时结束//Print(B, N);printf("Time = %dms\n", (stop - start));//Print(B, N);return 0;}

耗时Time = 327ms