为给定的数组按照升序进行排序,排序过程中,不定义新的数组,用插入的方式实现
/*************************************************************************
*
* 设计升序排序的接口
*
*
*author:jindouliu2024@163.com
*date:2025.4.8
*
* Copyright (c) 2024-2025 jindouliu2024@163.com All right Reserved
* ************************************************************************/
#include<stdio.h>
void swap(int buf[],int bufsize)
{
int data;
//假定第一个元素的值是最小的,从第二个元素开始遍历
for(int i=1;i<bufsize;i++){
//判断当前元素是否比前边已经排好的元素值小,小的话交换
for(int j=i-1 ; j >=0 ;j-- ){
if(buf[j+1]<buf[j]){
data = buf[j+1];
buf[j+1] = buf[j];
buf[j] = data;
}
}
}
for(int i=0;i<bufsize;i++){
printf("%3d",buf[i]);
}
}
int main()
{
int buf[10] = {2,5,8,34,56,23,12,9,6,11};
swap(buf,sizeof(buf)/sizeof(buf[0]));
return 0;
}
#include<stdio.h>
void swap(int buf[],int bufsize)
{
int data,j;
//假定第一个元素的值是最小的,从第二个元素开始遍历
for(int i=1;i<bufsize;i++){
data = buf[i];
//判断当前元素是否比前边已经排好的元素值小,小的话交换
for(j=i-1 ; j >=0 ;j-- ){
// if(buf[j+1]<buf[j]){
// data = buf[j+1];
// buf[j+1] = buf[j];
// buf[j] = data;
// }
if(buf[j]>data){
buf[j+1] = buf[j];
}
else{
break;
}
buf[j] = data;
}
}
for(int i=0;i<bufsize;i++){
printf("%3d",buf[i]);
}
}
int main()
{
int buf[10] = {2,5,8,34,56,8,12,9,6,11};
swap(buf,sizeof(buf)/sizeof(buf[0]));
return 0;
}
只进行一次插入,当遍历到该放入的元素的位置的时候,在进行插入
#include<stdio.h>
void swap(int buf[],int bufsize)
{
int data,current;
//假定第一个元素的值是最小的,从第二个元素开始遍历
for(int i=1;i<bufsize;i++){
data = buf[i];
//判断当前元素是否比前边已经排好的元素值小,小的话交换
for(int j=i-1 ; j >=0 ;j-- ){
// if(buf[j+1]<buf[j]){
// data = buf[j+1];
// buf[j+1] = buf[j];
// buf[j] = data;
// }
if(buf[j]>data){
current=j;
buf[j+1] = buf[j];
}
else{
current = j+1;
break;
}
}
buf[current] = data;
}
for(int i=0;i<bufsize;i++){
printf("%3d",buf[i]);
}
}
int main()
{
int buf[10] = {2,5,0,34,56,8,12,9,6,11};
swap(buf,sizeof(buf)/sizeof(buf[0]));
return 0;
}
来源链接:https://www.cnblogs.com/lradian/p/18815366
没有回复内容