插入排序总结

来源:互联网 发布:免费cf手游刷枪软件 编辑:程序博客网 时间:2024/06/08 12:36

简单插入排序:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>using namespace std;int main (void) {int i, j;int arr[100];int num;while (scanf ("%d", &num) != EOF) {for (i = 1;i <= num;i++) {scanf ("%d", &arr[i]);}for (i = 2;i <= num;i++) {if (arr[i] < arr[i-1]) {arr[0] = arr[i];for (j = i-1;arr[j] > arr[0];j--) {arr[j+1] = arr[j];}arr[j+1] = arr[0];}}for (i = 1;i <= num;i++) {printf ("%d ", arr[i]);}printf ("\n");}return 0;}

二分插入排序:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>using namespace std;int main (void) {int i, j;int num;int arr[100];while (scanf ("%d", &num) != EOF) {for (i = 1;i <= num;i++) {scanf ("%d", &arr[i]);}for (i = 2;i <= num;i++) {int low = 1;int high = i-1;arr[0] = arr[i];int m;while (low <= high) {m = (low + high) /2;if (arr[m] > arr[0]) {high = m-1;}else {low = m+1;}}for (j = i-1;j >= high+1;j--) {arr[j+1] = arr[j];}arr[j+1] = arr[0];}for (i = 1;i <= num;i++) {printf ("%d ", arr[i]);}printf ("\n");}return 0;}

二路插入排序:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>using namespace std;int main(void) {int num;int i, j;int arr[5];while (scanf("%d", &num) != EOF) {for (i = 1; i <= num; i++) {scanf("%d", &arr[i]);}int first = 0;int final = 0;int *p = (int*)malloc(sizeof (int)* num);p[first] = arr[1];for (i = 2; i <= num; i++) {if (arr[i] > p[final]) {p[++final] = arr[i];}else if (arr[i] < p[first]) {first = (first - 1 + num) % num;p[first] = arr[i];}else {for (j = final; arr[i] < p[j]; j = ((j + num) % num) - 1) {p[j + 1] = p[j];}p[j + 1] = arr[i];final++;}}for (i = 0; i < num; i++) {arr[i + 1] = p[(first + i + num) % num];}for (i = 1; i <= num; i++) {printf("%d ", arr[i]);}printf("\n");}return 0;}


0 0
原创粉丝点击