数据结构-排序
为给定的数组按照升序进行排序,排序过程中,不定义新的数组,用插入的方式实现
/*************************************************************************
*
* 设计升序排序的接口
*
*
*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]);
}
}
冒泡排序
void BubbleSort(int buf[],int size)
{
int data;
for(int i = 1;i < size;i++){
for(int j = 0; j < size-i;j++){
if(buf[j] > buf[j+1]){
data = buf[j];
buf[j] = buf[j+1];
buf[j+1] = data;
}
}
}
}
选择排序 找到序列中的最小值将其放在前边,直到整个序列为有序序列
void SelectSort(int buf[],int size)
{
int sub,min;//记录最小值的下标和元素值
for(int i = 0;i < size-1;i++){
sub = i;
min = buf[i];
for(int j = i+1;j < size; j++){
if(buf[j] < min){
sub = j;
min = buf[j];
}
}
buf[sub] = buf[i];
buf[i] = min;
}
}
计数排序,通过计算整个数组中比该元素小的元素的个数,并将该元素放在另一个数组中的比该元素小的计数值的下标下
void CountSort(int buf1[],int buf2[],int size)
{
int count = 0;
for(int i = 0; i < size;i++){//遍历整个数组
for(int j = 0; j < size;j++){//找出比该元素小的元素
if(buf1[j] < buf1[i]){
count++;//计数值++
}
}
buf2[count] = buf1[i];//将该元素赋值到另一个数组中
count = 0;
}
}
int main()
{
int buf[10] = {2,5,0,34,56,8,12,9,6,11};
swap(buf,sizeof(buf)/sizeof(buf[0]));
return 0;
}