插入排序

来源:互联网 发布:稀客 杨千嬅 知乎 编辑:程序博客网 时间:2024/06/01 10:23
#include <stdio.h>
/*
插入排序:
思路:
把元素,一次插入到(前一步)已经有序的数组中,并保持其有序


实现:
for(i=1; i<len; ++i){ // 从第二个开始排
t = arr[i];
j = i-1;
while(j>=0 && t<arr[j]){ // 找第n个元素的位置,同时移动需要移动的元素
arr[j+1] = arr[j]; // 从第n-1个元素开始比较。
j--; // 因为第n个位置会被第n-i位置的元素代替,因此,保存arr[n],并拿保存的值去个当前位置比较
} // 找到位置时,j已经比位置小1,
arr[j+1] = t; // 因此,j后面的那个位置,即是arr[n]的位置
}


总结:
插入排序,我们容易想到的是:
先找到位置,记录下来,
然后把需要移动的元素,统一向后移动一位,
空出来的位置,就是新元素插入的位置。


算法中,是“在移动元素的过程中确定位置”,从而,由“确定位置”“移动元素”两个循环,减少为1个。
*/
void InsertionSort(int*,int);


int main(void){
int i_arr[] = {12,21,23,32,34,43,45,54,56,65,67,76,78,87,89,98,90,45,43,67};
int i_arr_size;


i_arr_size = sizeof(i_arr) / sizeof(i_arr[0]);
InsertionSort(i_arr,i_arr_size);

return 0;
}


void InsertionSort(int* arr,int len){
int i,j,t;

printf("Array before sorting:\n");
for(i=0; i<len; i++){
printf("%d\t",arr[i]);
}
printf("\n");
getchar();


for(i=1; i<len; ++i){
t = arr[i];
j = i-1;
while(j>=0 && t<arr[j]){
arr[j+1] = arr[j];
j--;
}
arr[j+1] = t;
}

printf("Array after sorting:\n");
for(i=0; i<len; ++i){
printf("%d\t",arr[i]);
}
printf("\n");
getchar();
}
0 0
原创粉丝点击