public class StraightInsertionSort { /** * 辅助函数:输出数组内容 * * @param a:待输出数组 */ public static void printArray(int[] a) { for (int index = 0; index < a.length; index++) { System.out.print(a[index] + " "); } System.out.println(""); } /** * 直接插入排序 实现1 * * @param a:待排序数组 */ public static void insertSort(int[] a) { // 输出原始数组 printArray(a); for (int index = 1; index < a.length; index++) { int subIndex = index; // 等待插入的数据 int currentData = a[index]; while ((subIndex > 0) && (a[subIndex - 1] > currentData)) { a[subIndex] = a[subIndex - 1]; subIndex--; } // 插入到合适的位置 a[subIndex] = currentData; // 每次排序后也输出 printArray(a); } } /** * 直接插入排序 实现2 * @param a:待排序数组 */ public static void insertSort2(int[] a) { int n = a.length; int i, j; for (i = 0; i < n; i++) { int temp = a[i]; for (j = i; j > 0 && temp < a[j - 1]; j--) { a[j] = a[j - 1]; } a[j] = temp; printArray(a); } } public static void main(String[] args) { //insertSort(new int[] { 8, 2, 4, 9, 3, 6, 7, 10 }); insertSort2(new int[] { 8, 2, 4, 9, 3, 6, 7, 10 }); } }
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <time.h> #define MAXSIZE 10 typedef struct { int length; int arr[MAXSIZE+2]; }list; void insert(list* p) { int i,j; for (i = 2; i <= p->length; i += 1)//第一个暂存,第二个数字是待比较的数字,从第三个开始比较起 { p->arr[0] = p->arr[i];//数组的第一个数字用来暂存每次用来比较的arr[i] for (j = i-1; (p->arr[0] < p->arr[j]) && j!=0; j --) { p->arr[j+1] = p->arr[j]; } p->arr[j+1] = p->arr[0]; } } int main() { int i; list *plist; plist = (list*)malloc(sizeof(list));//分配空间 plist->length = MAXSIZE; plist->arr[MAXSIZE+2] = 0;//将最后一个数字置为0 srand((unsigned int)time(NULL));//随机种子生成 for (i = 1; i < MAXSIZE+1; i += 1)//数组的第一个数字用来暂存每次用来比较的arr[i] { plist->arr[i] = (rand() % 100);//生成10个100以内的随机数 printf("array before:%d\n", plist->arr[i]); } insert(plist); printf("\n"); for (i = 1; i < MAXSIZE+1; i += 1) { printf("array after:%d\n", plist->arr[i]); } return 0;
原文地址:http://blog.csdn.net/he315889714/article/details/41894367