C语言实现推排序

KeyPoint : 找到关键的父节点

     单线程找最大值 最快的方法

#include "stdlib.h"
#include "stdio.h"

void findMax(int *arr, int size) {
	int totParent = size / 2 - 1;
	for (;totParent >= 0;totParent--)
	{
		int parent = totParent;
		int child = 2 * totParent + 1;
		if (child < size - 1 && arr[child] < arr[child + 1])
		{
			child++;
		}
		if (arr[parent] < arr[child])
		{
			int tmp = arr[child];
			arr[child] = arr[parent];
			arr[parent] = tmp;
		}
	}
}

void printArr(int *arr, int length)
{
	for (int i = 0;i < length;i++)
	{
		printf("%d   ",arr[i]);
	}
	printf("\n");
}

void sortArr(int *arr, int length)
{
	for (int i = 0;i < length - 1;i++)
	{
		findMax(arr + i, length - i);
		printArr(arr + i, length - i);
	}

}
int main()
{
	int arr[10] = { 0,2,87,49,34,62,53,6,44,90 };
	int length = sizeof(arr)/sizeof(int);
	sortArr(arr, length);
	printArr(arr, length);
	system("pause");
	return 0;
}

  

时间: 2024-12-12 05:57:55

C语言实现推排序的相关文章

c语言递推算法1

递推算法之一:倒推法 1.一般分析思路: if 求解初始条件F1 then begin { 倒推 } 由题意(或递推关系)确定最终结果Fn; 求出倒推关系式Fi-1 =G(Fi ); i=n; { 从最终结果Fn出发进行倒推 } while 当前结果Fi非初始值F1 do 由Fi-1=G(Fi)倒推前项; 输出倒推结果F1和倒推过程; end { of then } else begin { 顺推 } 由题意(或递推关系)确定初始值F1(边界条件); 求出顺推关系式Fi=G(Fi-1); i=1

C语言学习_排序_插入排序

1.插入排序 #include <stdio.h> #include <stdlib.h> #define M 100 int main(void) { int i, j, n; int a[M] = {0}; printf("input n:"); scanf("%d", &n); printf("input a:"); for(i = 1; i <= n; i++) //从a[1]开始,也就是第二个数 s

R语言对推特数据进行文本情感分析

美国调查公司盖洛普公司(Gallup poll found)民调显示,至少51%美国人不赞同总统特朗普的政策.据外媒报道,特朗普上任8天以来引发51%美国人的不满,42%美国人赞同新总统的政策.该项调查共有1500名成年美国人,误差为3%. 为了验证美国民众的不满情绪,我们以R语言抓取的特朗普推特数据为例,对数据进行文本挖掘,进一步进行情感分析,从而得到很多有趣的信息. 找到推特来源是苹果手机或者安卓手机的样本,清理掉其他来源的样本 tweets <-trump_tweets_df>%sele

Go语言实现位图排序

Go语言提供了byte类型,一个byte对应8个位,所以转换一下就可以实现位图了. 代码: package main //author:xcl //date:2014-1-25 import ( "fmt" ) func main() { arrInt32 := [...]uint32{5, 4, 2, 1, 3, 17, 13} var arrMax uint32 = 20 bit := NewBitmap(arrMax) for _, v := range arrInt32 { b

C语言基础_排序

一.C语言基础 1)冒泡排序 int array[10] = {1,6,3,4,5,7,7,8,9,10}; for (int j = 0; j < 9; j++) { for (int i=0; i<9-i; i++) { if (array[i] > array[i+1]) { array[i] = array[i] ^ array[i+1]; array[i+1] = array[i] ^ array[i+1]; array[i] = array[i] ^ array[i+1];

C语言常见的排序方法——冒泡法、选择法、插入法

当我们要对C中一组数据进行排序是常见的排序方法有冒泡法.选择法.插入法 冒泡排序法(升序):假设一组数据a[0].a[1].a[2].a[3]...a[n],第一轮:先比较a[0]与a[1].a[1]与a[2]...a[i]与a[i+1]...a[n-1]与a[n]的大小,如果a[i]与a[i+1]不是升序(即a[i] > a[i+1]),那么就将a[i]与a[i+1]的值互换,第一轮过后,a[n]就是最大值:第二轮:运用第一轮同样的方法,比较a[0]与a[1].a[1]与a[2]...a[i]

基于python语言的经典排序法(冒泡法和选择排序法)

前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 在之前,曾写过使用java和C语言实现该两种排序法,详情见https://www.cnblogs.com/hong-fithing/p/7615907.html 搭建环境,准备工作就不冗余介绍了,网上搜罗一大堆 目录 冒泡排序法 选择排序法 冒泡排序法 冒泡类似于汽水现象,摇动一下,就有很多泡往上冒

C语言数据结构各种排序算法(选择,直接,希尔,起泡等排序)

#include <stdio.h> #include<stdlib.h> #include <time.h> #define MAX 20         /*线性表中最多元素个数*/ typedef int KeyType; typedef char InfoType[10]; typedef struct { KeyType key; InfoType data; }RecType; void InsertSort(RecType R[],int n) { int

c语言结构体排序示例

设计性实验编程实现对学生成绩表的相关信息排序.实验要求:⑴ 建立一个由n个学生的考试成绩表,每条信息由学号.姓名和分数组成.⑵ 按学号排序,并输出排序结果.⑶ 按分数排序,分数相同的则按学号有序,并输出排序结果.⑷ 排序方法及学生成绩表的存储结构不作限制,学生选择性能较好的即可. 代码如下: #include <stdio.h> #include <stdlib.h> #define MaxSize 50 struct Stu{ char *name; int id; int gr