码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构

时间:2019-10-05 20:43:18      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:include   fine   flag   思想   开始   containe   amp   big   str   

----------------

排序

----------------

冒泡排序思想:

“比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

#include <stdio.h>
#include "sort.h"


int main()
{
	ArrayList numlist = {
		{19,11,15,18,13,17,14,16,12},
		9,
	};
	PtArrayList pt_arraylist;
	pt_arraylist = &numlist;
	
	show((char *)"排序前 ", pt_arraylist);
	
	BubbleSort_Low(pt_arraylist);
//	BubbleSort_Mid(pt_arraylist);
//	BubbleSort_Mid_Opt(pt_arraylist);

	show((char *)"排序后 ", pt_arraylist);
	
	return 0;
}
//sort.h
#define True 1 
#define False 0
#define NUMSIZE 20
typedef struct {
	int array[NUMSIZE];
	int len;
}ArrayList, *PtArrayList; 

void show(char * info, PtArrayList * pt_arraylist); 
void BubbleSort_Low(PtArrayList * pt_arraylist);
void BubbleSort_Mid(PtArrayList * pt_arraylist);
void swap(int * first, int * second);

#include "sort_function.cpp"
//sort_function.cpp
void BubbleSort_Mid_Opt(PtArrayList pt_arraylist)
{
	int flag = True;	
	//改进版
	for (int i=0; i<pt_arraylist->len && flag; i++)
	{
		for (int j=0; j<pt_arraylist->len-i-1; j++)
		{
			//只有当第二层循环不出现一次True时,
			//才会有标志位False 
			flag = False; 
			if(pt_arraylist->array[j] > pt_arraylist->array[j+1]) 
			{
				swap(&pt_arraylist->array[j], &pt_arraylist->array[j+1]);
				flag = True;
			}
		} 
	} 
}

void BubbleSort_Mid(PtArrayList pt_arraylist)
{
	//对当前数字和其下一个相邻数字比较,大于则交换
	//冒泡到最后一个数肯定是最大的,所以不需要比较,即len-1-i
	//i进行一次表明有i个数字已经排好 
	for (int i=0; i<pt_arraylist->len; i++)
	{
		for (int j=0; j<pt_arraylist->len-i-1; j++)
		{
			if(pt_arraylist->array[j] > pt_arraylist->array[j+1]) 
				swap(&pt_arraylist->array[j], &pt_arraylist->array[j+1]);
//			printf("num[%d] = %d num[%d] = %d\n", j, pt_arraylist->array[j], j+1, pt_arraylist->array[j+1]);
		} 
	} 
}

void BubbleSort_Low(PtArrayList pt_arraylist)
{
	//依次将数字位与后续其他位比较,升序,大则交换 
	for (int i=0; i<pt_arraylist->len; i++)
	{
		for (int j=i+1; j<pt_arraylist->len; j++)
		{
			if(pt_arraylist->array[i] > pt_arraylist->array[j]) 
				swap(&pt_arraylist->array[i], &pt_arraylist->array[j]);
		} 
	} 
}

void show(char info[], PtArrayList pt_arraylist)
{
	printf("%s", info);
	for (int i=0; i<pt_arraylist->len; i++)
	{
		printf("%d ", pt_arraylist->array[i]);
	} 
	putchar(‘\n‘);	
}

void swap(int * first, int * second)
{
	int tmp;
	tmp = *first;
	*first = *second;
	*second = tmp;
	
}

  

  

  

 
 
 
 

数据结构

标签:include   fine   flag   思想   开始   containe   amp   big   str   

原文地址:https://www.cnblogs.com/qtnt/p/11625529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!