插入排序
算法步骤:
1.将0索引的元素到n索引的元素看做是有序的;
2.把n+1索引的元素到最后一个当成是无序的;
3.遍历无序的数据,将遍历到的元素插入有序的序列中适当的位置,从后向前进行比较
4.如遇到相同数据,插在后面。
整体代码块在最下方,有需要的可以复制
以下是main方法的实现
以下是插入排序算法的代码实现
第一部分先找出有序的代码,记录下无序序列的初始下标startIndex.
第二部分遍历无序序列,以第一个下标开始和前面的数据进行比较。
以下是数组的遍历打印的代码实现
以下是对于整个代码的整合,如果需要可以粘贴复制哟~
int main(){
void InsertSort(int arr[], int length);
void printarr(int arr[], int length);
int arr[] = { 3, 1, 4, 7, 9, 5, 2, 8 };
//以下是数组长度的判断,用数组的总个数的字节数除以单个元素的字节数
int arrlength = sizeof(arr) / sizeof(arr[0]);
InsertSort(arr, arrlength);
printarr(arr, arrlength);
}
void InsertSort(int arr[], int arrlength){
int startIndex = 0;//定义无序序列的初始下标
for (int i = 0; i < arrlength; i++){
//如果前一个元素大于后一个元素的值,则表明从i+1开始为无序序列
if (arr[i]>arr[i + 1]){
//将i+1的值赋给startIndex,此为无序序列的初始下标
startIndex = i + 1;
break;//找到无序序列,跳出循环
}
}
//遍历无序序列
int count = 0;//定义一个记录交换次数的变量
for (int i = startIndex; i < arrlength; i++){
//定义一个变量j,将无序序列的初始下标对应的数据与有序序列的数值进行比较
int j = i;
//如果后面的数值小于前面的数值,则进行数值的转换,直到比较到有序序列的第一个值
while (j>0 && arr[j] < arr[j - 1]){
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
j--;
count++;
}
}
printf("比较了%d次\n", count);
}
//打印数组的方法
void printarr(int arr[], int arrlength){
for (int i = 0; i < arrlength; i++){
printf("%d ", arr[i]);
}
printf("\n");//换行
}