插入排序

Posted 代码大大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序相关的知识,希望对你有一定的参考价值。

/*

*插入排序理论我就不写了,网络上应该多的是,比我要好。
*今天练习一下插入排序,插入排序还是比较稳定的一个算法,不算太坏。适用于少量数据
*在最坏情况下才是O(n^2),最好情况O(n),因为最好情况下,不需要内排序了呀
*为了惩罚自己,再写一遍,还是写到熟练吧,额额。。。
*/

/*
**************开始了,再来一遍,写到熟练为止。
*********换了一个思路********
void sort(int a[],int length){
for(int i=1; i<length; i++){
int max = a[i];
int j=i;//j变成‘i’了
while(j>0 && max<a[j-1]){
a[j] = a[j-1];
j--;
}//while
a[j] = max;
}
}

void sort(int a[],int length){
for(int i=1; i,lengthl;i++){
int max = a[i];
int j = i;
for(;j>0;){
if(max<a[j-1]){//比较
a[j]=a[j-1];
j--;
}
else {
break;//不满足就要跳出了。
}//ifEnd
}//forEnd
a[j] = max;
}//fiorEnd
}
*/
#include <stdio.h>
#include "stdlib.h"


void sort(int a[], int length){//插入排序
for (int i = 1; i < length; i++){//循环遍历
int temp = a[i];//假设a[i]是最大元素呢*——*
int j =i-1;//用a[i]和剩下的元素比较
//今天这里没有整明白,有点尴尬*__*
//是和max比较大小,不要整错了,你的目的就是用temp和剩下的元素比较
while (j >=0 && temp<a[j]){//
a[j+1] = a[j];//交换值,因为满足条件,a[i]就不是最大的了。所以要换位置了,但要用temp临时保存a[i],因为后面要用到。
j--;
}//forEnd
a[j+1] =temp ;//如果搞不清,就把j带入j+1,等于i。可以当个结论记一下。
}//forEnd
}

int main()
{
//写的实在有点烂了,这个测试运行,可以改进一下,不算太难。
int a[] = {1,5,0,3,9,4};
sort(a,6);
for (int i = 0; i < 6;i++){
printf("%d\t",a[i]);
}
return 0;
}

以上是关于插入排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法 插入排序(直接插入排序半插入排序希尔排序)

直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚

算法插入排序——希尔排序+直接插入排序

第三篇,插入排序算法:直接插入排序希尔排序

❤️数据结构入门❤️(4 - 3)- 插入排序

java排序之插入排序(直接插入排序和希尔排序)