数据结构-排序

为给定的数组按照升序进行排序,排序过程中,不定义新的数组,用插入的方式实现

/*************************************************************************
*
* 设计升序排序的接口
*
*
*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;
}
posted @ 2025-04-08 20:12  LRadian  阅读(10)  评论(0)    收藏  举报