插入排序和选择排序

来源:互联网 发布:淘宝用绒里图片 编辑:程序博客网 时间:2024/05/01 11:19

插入排序用算法导论里面的描述:

开始摸牌时,我们左手是空的,牌面朝下放在桌子上。接着,一次从桌子上摸起一张牌,并且将它插入到左手的得正确位置上,为了找到这个牌的正确位置,我们必须将它从左到右依次和左手上的牌比较,然后插入,左手上的牌每次都是有序的。

伪代码:

INSERTON-SORT(A){

for j = 2 to j = A的长度{

do key = A[j];

i = j-1;

while(i > 0 && A[i] > key)

i = i-1;

A[i+1] = key;

}

//c语言代码

void InsertSort(int *a, int n){int i = 0;int j = 0;int key;for(j = 1; j < n; j++){key = a[j];i = j-1;while(i>= 0 && key < a[i]){a[i+1] = a[i];i--;}a[i+1] = key;}}

可以理解成为从一个中取出一个数,插入到一个有序的数组中去。

选择排序:

1.首先找出数组A的最小元素,并和第一个元素交换

2.找出数组中次小的元素,和第二个交换

3.依次类推,对A中n-1个元素中持续这个过程


void selSort(int *a, int len){int i, j;int min, k;for(i = 0; i < len-1; i++){min = i;//min = a[i];交换的是下标,因为是数组中的交换for(j = i+1; j < len; j++){if(a[min] > a[j]){min = j;//记录最小值的下标}}if(a[min] != a[i]){//和第i个交换k = a[min];a[min] = a[i];a[i] = k;}}}



1 0