三种基本排序(直接插入,直接选择,直接交换)

一:直接插入排序
将一串数分成两部分,前部分是已经排序好的,后部分是未排序的。
开始将第一个数作为已排序的第一个数,未排序数在已排序中找插入的位置即完成排序。

for (i = 1; i < count; i++) {
		tmp = data[i];
		for (j = 0; j < i && tmp >= data[j]; j++) {
		}
		for (t = i; t > j; t--) {
			data[t] = data[t - 1];
		}
		data[j] = tmp;
	}	

从第二个元素开始,在已排序部分找到插入位置后,将其后数后移,再插入
在这里插入图片描述

二:直接选择排序
开始假设第一个数为最小数,遍历一次数组寻找最小数。
遍历一次后将最小数和未排序部分第一个元素交换位置。

for (i = 0; i < count - 1; i++) {
		minIndex = i;
		for (j = i; j < count; j++) {
			if (data[j] < data[minIndex]) {
				minIndex = j;
			}
		}
		if (minIndex != i) {
			tmp = data[i];
			data[i] = data[minIndex];
			data[minIndex] = tmp;
		}
	}	

在这里插入图片描述

三:直接交换排序
从第一个元素开始,若后一元素比前一元素小,则两元素交换。

int hasSwap = 1;

	for (i = 0; hasSwap && i < count - 1; i++) {
		hasSwap = 0;
		for (j = 0; j < count - i - 1; j++) {
			if (data[j] > data[j+1]) {
				tmp = data[j];
				data[j] = data[j+1];
				data[j+1] = tmp;
				hasSwap = 1;
			}
		}
	}	

在这里插入图片描述

注:增加效率方法:若某次遍历没有交换,则说明数组已经排序完成。
外层遍历只需遍历到倒数第二个元素,内层遍历不需要遍历到已经排序完(即最后几个元素)的元素。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔幻音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值