挑战程序设计(1)——简单的排序算法

三个简单的排序算法

一、插入排序

插入排序的思想就是把待排序数组看作是两个部分,一部分视为已完成排序,另一部分认为未完成排序。将未排序部分的元素依次插入到已排序部分,完成排序。
代码如下:
//插入排序
void insertionSort(int A[], int N) {
	int i, v, j;
	for (i = 1; i < N; i++) {
		v = A[i];
		j = i - 1;
		while (j >= 0 && A[j] > v){
			A[j + 1] = A[j];
			j--;
		}
		A[j + 1] = v;
	}
}

二、冒泡排序

和插入排序一样,冒泡排序也将数组看做“已排序部分”和“未排序部分”,想象冒泡的过程,排序时从末尾开始向上依次比较两个元素,如果大小关系相反则交换。
代码如下:
//冒泡排序
void bubbleSort(int A[],int N)
{
	int i, j = 0;
	for (i = 0; i < N; i++) {
		for (j = N - 1; j >= i+1; j--){
			if (A[j] < A[j - 1])
				swap(A[j], A[j - 1]);
		}
	}
}

三、选择排序

同上面两种排序方式一样,选择排序也将数组视为“已排序部分”和“未排序部分”两个部分,每次排序选择一个未排序部分中的元素看作是最小的元素,然后依次与后面的元素进行比较,即选出未排序部分最小的元素(这个过程实际上就是找到未排序部分的最小元素),循环实现这个过程即可完成排序。
代码如下:
//选择排序
void selectSort(int A[], int N)
{
	int i, j, minj;
	for (i = 0; i < N - 1; i++) {
		minj = i;
		for (j = i; j < N; j++) {
			if (A[j] < A[minj])
				minj = j;
		}
		swap(A[minj], A[i]);
	}

}
小结
从算法的复杂度上来看,三种算法都是O(N²)的复杂度,但是冒泡排序和选择排序在执行时不受输入数据的影响,但是插入排序在执行的却会依赖数据,因此插入排序在处理某些数据时会有更高的效率。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值