C编程——插入排序

1、程序文件

#include <stdio.h>

// 交换
void mySwap(int *a, int i, int j)
{
	int tmp = a[i];
	a[i] = a[j];
	a[j] = tmp;
}

// 打印
void myPrint(int *a, int len)
{
	int i;
	for (i = 0; i < len; i++)
	{
		printf ("%4d", a[i]);
	}
	printf ("\n");
}

// 插入排序
void mySort(int *a, int len)
{
	int i;
	
	// 在一个已经排好序的数组里插入新元素
	// 只取数组里的第一个元素,然后把第二个元素往第一个元素里面插
	// 从后往前找第一个比它小的元素
	// 一边循环,一边找位置
	// 元素不符合要求就将其后移
	// 符合要求就不移
	// 先是第一个元素有序,插入后,变成两个元素有序
	for (i = 1; i < len; i++)
	{
		// 将当前下标为i的数组元素的值保存在get里
		int get = a[i];
		
		// 把get的前一元素通过j保存下来
		int j = i - 1;
		
		// j >= 0 ==> 防止越界
		
		// 一旦get保存的值,遇到更小的a[j]就退出
		// 然后在j+1位置处插入get
		// 或者循环到数组首元素/已遍历其之前的所有元素
		while (j >= 0 && get < a[j]) 
		{
			// 把较大值后移
			// 或者说是把不符合条件的值后移
			// 把比get大的值后移
			// 拿get和a[j]进行比较,只要比get大,就把a[j]后移
			// 移完后空出的位置,插入get
			a[j+1] = a[j];
			j--;
		}
	
	    // a[j]的位置是比get小的位置 
		// 插在其后的位置
		a[j+1] = get;
	}
}

int main()
{
	int a[] = {9,8,7,6,5,4,3,2,1,0};
	int len = sizeof(a)/sizeof(a[0]);
	mySort(a, len);
	myPrint(a, len);
	
	return 0;
}

2、测试结果

root@lj:/mnt/hgfs/shared-lj# gcc 插入排序study.c 
root@lj:/mnt/hgfs/shared-lj# ./a.out 
0   1   2   3   4   5   6   7   8   9 

猜你喜欢

转载自blog.csdn.net/ypjsdtd/article/details/85196997
今日推荐