数据结构

Posted qtnt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构相关的知识,希望对你有一定的参考价值。

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

排序

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

冒泡排序思想:

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

#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;
	

  

  

  

 
 
 
 

以上是关于数据结构的主要内容,如果未能解决你的问题,请参考以下文章

在数据结构中数据、数据元素、数据对象、数据结构、存储结构、数据类型以及抽象数据类型的定义分别是啥

数据结构与数据类型有啥区别?

数据结构都有哪些

数据结构和数据类型的区别

数据结构哪些是四种常见的逻辑结构

数据结构基本概念