插入排序
来源:互联网 发布:稀客 杨千嬅 知乎 编辑:程序博客网 时间: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();
}
/*
插入排序:
思路:
把元素,一次插入到(前一步)已经有序的数组中,并保持其有序
实现:
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
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- atexit() 和 exit() 函数
- hdu 5035 Delivery
- 在无锡哪家医院治疗妇科好
- android和iOS平台的崩溃捕获和收集
- Top域名引领潮流终将成为主流
- 插入排序
- git rebase Document
- Linux 分区
- Android RakNet 系列之五 视频通讯 OpenCV4Android
- sql优化
- 黑马程序员-objective-c基础学习-类
- Android核心分析(18)-----Android电话系统之RIL-Java
- Android 在wifi下判断是否有网络 Ping一下百度
- Top域名引领潮流终将成为主流