代码编织梦想

#include <iostream>
#include <string.h>
using namespace std;

void qsort(int arr[], int left, int right)
{
	if (left >= right)
	{
		return;
	}
	int l_point = left, r_point = right;
	int mid_arr = arr[left];
	while (l_point < r_point)
	{
		while (l_point < r_point && arr[l_point] < mid_arr)
		{
			l_point++;
		}
		while (l_point < r_point && arr[r_point] > mid_arr)
		{
			r_point--;
		}
		int temp = arr[l_point];
		arr[l_point] = arr[r_point];
		arr[r_point] = temp;
	}
	qsort(arr, left, l_point - 1); // l_point这个位置已经被替换过,不需要在更改
	qsort(arr, l_point + 1, right);
}

void bubble_sort(int arr[], int len)
{
	for (int i = 0; i < len - 1; ++i)
	{
		for (int j = 0; j < len - 1 - i; ++j)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

void select_sort(int arr[], int len)
{
	for (int i = 0; i < len - 1; ++i)
	{
		int min = i;
		for (int j = i + 1; j < len; ++j)
		{
			if (arr[j] < arr[min])
			{
				min = j;
			}
		}
		int temp = arr[min];
		arr[min] = arr[i];
		arr[i] = temp;
	}
}

void insert_sort(int arr[], int len)
{
	for (int i = 1; i < len; ++i)
	{
		int j = i-1;
		int key = arr[i];
		while (j>=0 && arr[j]>key)
		{
			arr[j+1] = arr[j];
			j--;
		}
		swap(arr[j+1],key);
	}
}
void max_heapify(int arr[], int start, int end)
{
	int dad = start;
	int son = dad * 2 + 1;
	while (son <= end)
	{
		if (son + 1 <= end && arr[son] < arr[son + 1])
		{
			son++;
		}
		if (arr[dad] > arr[son])
		{
			return;
		}
		else
		{
			swap(arr[son], arr[dad]);
			dad = son;
			son = dad * 2 + 1;
		}
	}
}
void heap_sort(int arr[], int n)
{
	for (int i = n / 2 - 1; i >= 0; i--)
	{
		max_heapify(arr, i, n - 1);
	}
	for (int i = n - 1; i > 0; i--)
	{
		swap(arr[0], arr[i]);
		max_heapify(arr, 0, i - 1);
	}
}

void shell_sort(int arr[],int n)
{
	int j;
	for (int gap = n>>1; gap >0 ; gap >>= 1)
	{
		for (int i = gap; i < n; ++i)
		{
			int temp = arr[i];
			for (j = i-gap; j >=0 && arr[j] > temp; j-=gap)
			{
				arr[j+gap] = arr[j];
			}
			arr[j+gap] = temp;
		}
	}
}

void merge_sort(int arr[],int reg[],int start,int end)
{
	if(start>=end)
	{
		return;
	}
	int len = end - start;
	int mid = start+len/2;
	int start1 = start,end1 = mid;
	int start2 = mid+1,end2 = end;
	int k = start;
	merge_sort(arr,reg,start1,end1);
	merge_sort(arr,reg,start2,end2);
	while (start1<=end1 && start2<=end2)
	{
		reg[k++] = arr[start1] > arr[start2] ? arr[start2++] : arr[start1++];
	}
	while (start1<=end1)
	{
		reg[k++] = arr[start1++];
	}
	while (start2<=end2)
	{
		reg[k++] = arr[start2++];
	}
	for (int i = start; i <= end; ++i)
	{
		arr[i] = reg[i];
	}
}

void countingSort(int arr[],int n)
{
	int max = 0;
	for (int i = 0; i < n; ++i)
	{
		if(max<arr[i])
		{
			max = arr[i];
		}
	}
	int length = max + 1;
	int count[length] = {0};
	for (int i = 0; i < n; ++i)
	{
		count[arr[i]]++;
	}
	int len = sizeof (count)/sizeof (*count);
	int k = 0;
	for (int i = 0; i < len; ++i)
	{
		while (count[i]!=0)
		{
			arr[k++] = i;
			count[i]--;
		}
	}

}

int main()
{
	int arr[] = { 3, 5, 3, 0, 8, 6, 1, 5, 8, 6, 2, 4, 9, 4, 7, 0, 1, 8, 9, 7, 3, 1, 2, 5, 9, 7, 4, 0, 2, 6 };
	int n = sizeof (arr)/sizeof (*arr);
	int reg[n];
	countingSort(arr,n);
//	merge_sort(arr,reg,0,n-1);
//	shell_sort(arr,n);
//	heap_sort(arr, n);
//	insert_sort(arr, n);
//	select_sort(arr,n);
//	bubble_sort(arr, n);
//	qsort(arr, 0, n - 1);
	for (int i = 0; i < n; ++i)
	{
		if (i != n - 1)
		{
			::printf("%lld ", arr[i]);
		}
		else
		{
			::printf("%lld ", arr[i]);
		}
	}

}
每一个优秀的人的背后都有一段沉默的时光,那是付出很多努力却不一定有结果的日子,我们把它叫做扎根。
本文链接:https://blog.csdn.net/CCCrunner/article/details/129674813

C/C++学习教程:C语言排序算法—插入排序算法-爱代码爱编程

前言:插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。 直接插入排序是插入排序算法中的一种,采用的方法是:在添加新的记录时,使用顺序查找的方式找到其要插入的位置,然后将新记录插入。 很多初学者所说的插入排序,实际上指的就是直接插入排序算法,插入

C语言经典排序算法之快速排序(详解)-爱代码爱编程

文章目录 一、何为算法二、排序算法三、快速排序算法 一、何为算法 1、算法(Algorithm),是程序设计的灵魂,它是利用系统的方法描述解决问题策略的机制。 2、正确算法应满足的性质: 输入:有零个或多个输入输出:至少有一个输出确定性:组成算法的每条指令清晰,无歧义。有限性:一个算法在执行有限步骤后必须结束,即计算步骤是有限的。3、描述

C语言排序算法(一):冒泡排序-爱代码爱编程

分享一下我对C语言中冒泡排序算法的学习和理解(裂开了,足足写了一天,自闭中…) 文章目录 冒泡排序算法原理实例演示时间复杂度C语言实现代码加入用户输入程序对于上述程序bug的解决方案对算法进行封装及调用运行结果算法优化写在后面 冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果

[C/C++]C语言实现简单的冒泡算法-爱代码爱编程

用C语言实现对整形数组的冒泡排序 冒泡排序:比较两个相邻的元素,将值大的元素交换到右边。 思       路:  遍历数组,对数组中相邻的两个元素进行比较,如果需要升序,前一个数据大于后一个数据时,交换两个位置上的数据。 数组中n个元素,最多进行n - 1次排序 ,每次进行 n - 1 - i次交换,i为当前排序的次数。 按照这一思路得到如下代码:

什么是算法c语言中,C语言/C++算法基本概念-爱代码爱编程

分享编程技能、互联网技术、生活感悟、打造干货分享平台,将总结的技术、心得、经验分享给大家,这里不只限于技术!还有职场心得、生活感悟、以及面经。 C语言/C加加算法基本概念 1. 算法是什么 算法:顾名思义,一种计算的方法,在程序设计上,就表现为一组指令序列。 为了使得算法有意义,还规定算法必须是有限的和确定的,也就是说算法的执行时间有限、执

快速排序的降序c语言算法,C语言算法-排序-爱代码爱编程

C语言算法-排序 环境 PC环境:Windows10 64bit IDE:sublime text3 注:sublime text3需要安装C/C++编译环境处理 选择排序 特点:简单、容易实现 缺点:执行速度慢 实现过程:通过遍历的方式进行比较,找出数据中最小的(或最大的)放到起始位置,然后起始位置向前加1,再从剩下的找出最小的,

C/C++实现希尔排序(两种方式)-爱代码爱编程

介绍 希尔排序又称 “缩小增量排序”,它也是一种插入类排序的方法。 希尔排序原理: 希尔排序属于插入类排序,是 将整个有序序列分割成若干小的子序列 分别进行 插入排序。 具体原理可看下图: 按照一定的规则,将数组分为多个组,然后每个组分别进行插入排序。 实现 方式一 这种方式,将数组分组后,不会处理完一组再处理一组,也就是说不会将第一小组插入排序好

用c语言实现选择排序(附有详细代码)-爱代码爱编程

选择排序改进了冒泡排序,每次遍历列表只做一次交换,为了做到这一点,一个选择排序在遍历时寻找最大的值,并在完成遍历后,将其放到正确的地方。第二次遍历,找出下一个最大的值。遍历n-1次排序n个项,最终项必须在n-1次遍历之后 例子如下:  代码如下: #include<stdio.h> void selectSort( i

C语言实现快速排序算法-爱代码爱编程

目录 序 嗨,这里是狐狸~~  快速排序的思想: 快速排序的流程: 整个算法处理过程:  算法动态演示:  代码如下: 总结 序 愿天上的每一个流星,都为你而闪耀天际。 嗨,这里是狐狸~~  今天是2021年12月17日,星期五,距离2022年还有14天,今天又来和大家见面了,时光荏苒,趁还有些时日,多发些有用的知识出来,也

C/C++快速排序算法-爱代码爱编程

#include <stdlib.h> #include <stdio.h> void quicksort(int *arr,unsigned int len) { if(len < 2) return;//如果子序列小于两个元素则不用排序 int l = 0;//左下标 int r = len-

C语言排序的几种算法-爱代码爱编程

C语言排序方法有三种, 一是冒泡排序法 通过双循环不断的比较,交换位置,将需要排序的元素一点一点向两侧移动,逐渐达到排序的目的 代码如下: for (j = 0; j < n; j++)     {         for (i = 0; i < n- j; i++)         if (a[i] > a[i + 1])//比较   

用C语言来实现冒泡排序-爱代码爱编程

冒泡排序的简介: 1.原理: 比较两个相邻的元素,将值大的元素交换到右边 2.设计原理:(文字):N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数 3.冒泡排序的优点: 每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。如上例:第一趟

快速排序(非递归)——c语言实现_快速排序非递归算法-爱代码爱编程

🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 文章目录 🥇一、递归算法快速排序分析🥈二、非递归算法实现快速排序🎸2.1 需求分析🎻2.2 图解分析(如何利用栈) 🥉三、快排(非递归)

算法训练之快速排序_算法题 快速排序-爱代码爱编程

数据结构学习 学习内容的原始链接算法简单介绍以及解析快速排序的思路算法图解算法的总体思路 快速排序算法题【模板】快速排序题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提