吃透冒泡排序,选择排序,插入排序

  为了更好地进行数据处理和数据分析,我们常常需要对数据进行排序。排序算法作为计算机科学已经被广泛研究和应用。排序算法的优化不仅对计算机科学领域有着深远的影响,也对其他领域的发展起到了重要的作用。因此我也是历经艰辛总结出了c语言常见的三种排序方式。

选择排序

开始写代码前我们要了解选择排序的逻辑思维,假设我们要将(1 6 5 7 8 4 7)从小到大依次排序,首先,我们要将一号位的 1 分别与后面的六个数字比大小,如果有数字比 1 小,那就交换亮着的位置,否则不交换,下一步就是将二号位的 6 分别与后面的五位数字交换,细心的同学可能发现,5 和 4都比 6 小,究竟交换哪两个位置,不急,我们分析一下便知道了,三号位的 5 比二号位的 6 小,交换位置得到(1 5 6 7 8 4 7)二号位的 5 再分别和四号位的 7,五号位的8,比较,不交换位置,当和六号位的4比较时交换位置得到(1 4 6 7 8 5 7)多次比较最终得(1 4 5 6 7 7 8)

因此我们需要一个for循环分别取出我们数字,再嵌套一个for 循环让这些数字比较大小。

冒泡排序

  冒泡排序字面意思泡泡从水里冒出来,由小到大,而它的排序方式类似于选择排序,也是前面的数字和后面的数字比较大小,然后交换位置,而冒泡排序是两个相邻的数字比较大小。

(1   6   5   7   8   4   7)先是一号位的1和二号位的6比较,然后二号位的6和三号位5比较,交换位置,然后三号位就变成了6再和四号位的7比较依次类推。因此依然要用两个for循环用来取数字,循环比较大小。

插入排序

       插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。经常插队的朋友应该很了解。

ConcurrentHashMap是Java中的一个线程安全的哈希表实现,它是基于散列的数据结构,可以支持并发的读和更新操作。它相比于普通的HashMap,在多线程环境下具有更好的性能和可靠性。 ConcurrentHashMap的主要特点如下: 1. 线程安全:ConcurrentHashMap使用了一种细粒度的锁机制来保证线程安全,允许多个线程同时进行读操作,而对写操作进行了分段加锁,不会阻塞其他读操作。 2. 分段锁:ConcurrentHashMap内部将数据分成多个段(Segment),每个段都维护了一个独立的哈希表。不同的线程可以同时访问不同的段,从而提高并发性能。 3. 原子性操作:ConcurrentHashMap提供了一些原子性的操作方法,如putIfAbsent()、remove()和replace()等。这些方法可以保证在操作期间没有其他线程对数据进行修改。 4. 无需加锁的读操作:ConcurrentHashMap允许多个线程同时进行并发读操作,因为读操作不会产生冲突,不需要加锁。 5. 高效性能:ConcurrentHashMap在大多数情况下具有比Hashtable和同步的HashMap更好的并发性能。 要充分理解和使用ConcurrentHashMap,你可以关注以下几点: - 理解其线程安全机制和锁的细粒度设计,避免出现死锁和竞态条件等问题。 - 确保在多线程环境下使用正确的并发控制方法,如使用原子性操作方法而不是先检查后执行的方式。 - 注意ConcurrentHashMap的迭代器可能不是强一致性的,如果需要强一致性的结果,可以考虑使用其他手段来处理。 - 根据具体的使用场景和需求,选择合适的并发度和初始容量。 希望以上信息对你有帮助!如果你还有其他问题,请继续提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值