选择排序

作为软件工程科班出身的程序员,数据结构与算法是必修课,可惜自己没有好好学,工作中也用的非常少.决定从今天起,把这门课重头学一遍,里面涉及的数据结构与算法,自己全部写一遍.看看能够坚持多久奋斗

开篇从经典的排序算法-选择排序开始:

/*
 * 选择排序:首先找出最大的元素,把它移动到a[n-1],然后在剩余下n-1个元素中寻找最大的元素,并把它移动到a[n-2],依次排序.
 * 算法复杂度:比较的次数是固定的,1+2+3+...+n-1=(n-1)*n/2,即等于O(n^2).
 *
 */

#include <stdio.h>

static void print_arr(int arr[], int arr_size)
{
	int i;

	if(NULL == arr || arr_size <= 0)
		return;

	for(i = 0; i < arr_size; i++)
		printf("%d ", arr[i]);
	printf("\n");
}

int main()
{
	int max_index, max_value;
	int i, j, arr_size, temp_value;

	int arr[] = {4, 3, 7, 6, 5, 0, 9, 1};

	arr_size = sizeof(arr)/sizeof(arr[0]);
	printf("Before sort: ");
	print_arr(arr, arr_size);

	/* Selection Sort */
	for(i = arr_size - 1; i > 0; i--) {
		max_index = i;
		max_value = arr[i];
		/* Find out the max value and it's index */
		for(j = 0; j < i; j++) {
			if(arr[j] > arr[max_index]) {
				max_index = j;
				max_value = arr[j];
			}	
		}
		/* Swap it to index i */
		if(i != max_index) {
			temp_value = arr[i];
			arr[i] = arr[max_index];
			arr[max_index] = temp_value;	
		}
	}

	printf(" After sort: ");
	print_arr(arr, arr_size);

	return 0;
}

虽然在Linux下编译一个文件gcc一句话就搞定,不过使用Makefile是一个好习惯.

CC=gcc
CCFLAGS=-I/usr/local/include -O2 
LDFLAGS=-L/usr/local/lib 
TARGET=SelectionSort
OBJS=SelectionSort.o
RM=rm -f

$(TARGET):$(OBJS)
	$(CC) -o $(TARGET) $(OBJS) $(LDFLAGS)

$(OBJS):%.o:%.c
	$(CC) -c -g $(CCFLAGS) $< -o $@

clean:
	$(RM) $(TARGET) $(OBJS) *~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值