/**
*
*/
package com.yxh.google;
/**
* @author 易小华(Max)
*
*/
public class BitStruct {
public static void main(String[] args) {
BitStruct bits = new BitStruct(100);
int[] a ={45,13,67,89,3,49,57};
for(int i:bits.sort(a))
System.out.println(i);
}
/**
* 位向量,每个整数都有32位
*/
private int[] a;
public BitStruct(int n) {
a = new int[n / 32 + 1];
}
/**
* 设置第i位的值为1
* @param i
*/
public void set(int i) {
a[i >> 5] |= (1 << (i & 31));
}
/**
* 设置第i位的值为0
* @param i
*/
public void clr(int i) {
a[i >> 5] &= ~(1 << (i & 31));
}
/**
* 获取第i位的值
* @param i
* @return
*/
public int test(int i) {
return a[i >> 5] & (1 << (i & 31));
}
/**
* 对整型数组进行排序处理
* @param i_array
* @return
*/
public int[] sort(int[] i_array)
{
int[] result = new int[i_array.length];
for(int i: i_array)
{
set(i);
}
int count = 0;
for(int i=1; i<100 ; i++)
{
if(test(i)!=0)
{
//System.out.println(i);
result[count] = i;
count++;
}
}
return result;
}
}
分享到:
相关推荐
希尔排序的时间复杂度在最坏情况下可以达到O(n^2),但在平均情况下能够达到O(nlogn)。 C++作为一门强大的编程语言,广泛应用于系统软件、应用软件、嵌入式系统等领域。在C++中实现希尔排序,我们可以利用STL中的...
例如,在C++中,可以使用标准库中的数据结构,如向量(vector)或数组,以及自定义函数来实现各种排序算法。此外,利用`iostream`等库进行输入输出管理,便于数据读取和结果显示。 ### 结论 排序算法是计算机科学...
希尔排序的时间复杂度取决于增量序列的选择,一般介于O(n log n)和O(n^(3/2))之间。 - **随机化快速排序**:快速排序是一种非常高效的排序算法,采用了分治策略来把一个序列分为较小的两个子序列。具体操作为,...
它们都按元素的自然排序或自定义排序规则自动组织元素,使得查找、插入和删除操作的时间复杂度接近对数级别。 - **应用场景**:适用于需要快速查找和维护唯一性或重复性的元素集合场景,如关键字搜索、去重过滤等...
冒泡排序的时间复杂度在最坏情况下为O(n²),最好情况下为O(n),平均情况为O(n²)。虽然冒泡排序效率相对较低,但它易于理解和实现,特别适合教学和初学者学习排序算法的基本原理。在实际应用中,更高效的排序算法如...
桶式排序是一种特殊的排序算法,主要用于排序一个有n个整型元素的数组a[n],其中对任意i,0 [i] 。桶式排序的原理是将输入的元素分配到m个桶中,然后对每个桶中的元素进行排序,最后将所有桶中的元素合并得到最终的...
其中,选择排序可以在一次遍历中找出最大数,时间复杂度为O(n)。如果数据量较大,可以考虑更高效的算法,如快速选择或堆排序,它们能在较短的时间内找到最大值。 对于这类问题,C++提供了方便的数据结构如数组和...
这个算法的时间复杂度主要取决于排序的过程,通常为O(n log n),其中n是两个数组中元素总数的最大值。空间复杂度是O(min(m, n)),m和n分别是两个数组的长度,因为我们只存储交集元素,所以结果向量的大小不会超过较...
冒泡排序算法是一种比较耗时的排序方法,在最好情况下(输入的数列已经是正序),时间复杂度为O(n),在最坏情况下(输入的数列是完全逆序)和平均情况下,时间复杂度均为O(n^2),其中n是数组中元素的数量。...
希尔排序的时间复杂度在最坏情况下为O(n^2),但在实际应用中通常表现出较好的性能。 `main.cpp` 文件中可能包含了一个希尔排序的实现。通常,C++代码会定义一个函数,如`shellSort`,用于实现希尔排序。该函数可能...
D. *建立函数create:根据一维数组a[n]建立一个单链表,使单链表中各元素的次序与a[n]中各元素的次序相同,要求该程序的时间复杂度为O(n)。 E. *整理函数tideup:在非递减有序的单链表中删除值相同的多余...
4. **二分查找**:在有序列表中查找元素,时间复杂度为O(log n)。 **高精度运算专题** 1. **高精度比较**:比较大数的大小,需要逐位比较。 2. **高精度加法、减法、乘法**:涉及大数的位运算和进位处理。 3. **高...
- **计算理论**:包括计算模型、算法复杂度等基础知识。 - **软件工程**:讲解软件开发过程中的管理、需求分析、设计等方面。 - **数据结构与算法**:介绍常用的数据结构(如数组、链表)以及排序、搜索等基本算法。...
包括排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序)、查找算法(线性查找、二分查找)、图论算法(Dijkstra最短路径、Floyd-Warshall所有对最短路径)、动态规划等。每种算法都有其特定的应用场景...
由于采用了类似二分查找的策略,`lower_bound`的时间复杂度为O(log n),其中n是容器的大小。这意味着它在处理大数据集时非常高效。 **3. 迭代器失效** 在容器发生改变后,如删除元素,指向这些元素的迭代器可能会...
- 掌握时间复杂度与空间复杂度的计算方法,能够对不同算法进行性能评估。 3. **查找技术**: - 顺序查找与二分查找:适用于不同类型数据结构的查找方法。 - 哈希表:基于哈希函数实现快速查找的技术原理。 - 图...
3. **效率分析**:`std::sort`使用了一种名为“快速排序”的高效算法,平均时间复杂度为O(n log n),最坏情况下也是O(n log n),空间复杂度为O(log n)。 4. **稳定性**:`std::sort`不是稳定的排序算法,也就是说,...
集合的实现可以使用位向量和链表两种方式,其中位向量适用于元素范围固定的情况,链表则更适用于元素范围不确定的情况。 **四、排序与选择** 排序是计算机科学中的基本操作,常见的排序算法包括冒泡排序、插入排序...
二分查找是一种在有序数组中查找特定元素的高效算法,时间复杂度为O(logn)。 #### 七、数据结构 **1. 顺序队列** 顺序队列是一种基于数组实现的队列,支持队首入队和队尾出队操作。 **2. 顺序栈** 顺序栈是一种...