数据结构学习笔记一:简单排序与查询算法
2010-05-04 17:13
603 查看
很悲剧,写的好多东西,到源代码那儿想改个属性的,结果没了一大半,就这样了凑合着吧
选择排序的原理
public void SelectionSort(int[] arr)
{
int temp;
int min;
for (int outer = 0; outer <= arr.GetUpperBound(0); outer++)
{
min=outer;
for (int inner = outer + 1; inner <= arr.GetUpperBound(0); inner++)
{
if (arr[min] > arr[inner])
{
temp = arr[min];
arr[min] = arr[inner];
arr[inner] = temp;
}
}
}
}
[/code]
冒泡排序的原理:
(1)比较arr[0],arr[1],如果arr[0]>arr[1],则交换
(2)比较arr[i-1],arr[i],如果arr[i-1]>arr[i],则交换直到i=n-1,这样最大的一个数就在最右边a[n-1]中了
(3)重复(1)(2)到n-i
public void BubbleSort(int[] arr)
{
int temp;
for (int outer = arr.GetUpperBound(0); outer >= 1; outer--)
{
for (int inner = 0; inner < outer; inner++)
{
if(arr[inner]>arr[inner+1])
{
temp = arr[inner];
arr[inner] = arr[inner + 1];
arr[inner + 1] = temp;
}
}
}
}
插入排序的原理:与冒泡和选择排序不同,插入排序主要是移动,打过斗地主的都知道,首先手上有一张牌准备插入第二张是,要按照大小顺序排序,一旦插入,就是一个已排序的序列,难的是该插在哪儿,所以要一个个的比较然后移动到合适位置插入。
public void InsertionSort(int[] arr)
{
int temp;
int inner;
for (int outer = 1; outer <= arr.GetUpperBound(0); outer++)
{
inner = outer;
temp = arr[outer];
while (inner > 0 && temp < arr[inner - 1])
{
arr[inner] = arr[inner - 1];
inner--;
}
arr[inner] = temp;
}
}
[/code]
两种简单的查找算法:
顺序查找:适合未排序的数列
public int LinearSearch(int[] arr, int elem)
{
for (int i = 0; i <= arr.GetUpperBound(0); i++)
{
if (arr[i] == elem)
return i;
}
return -1;
}
[/code]
二分查找:适合已排好序的
(1)递归方式
public int BinarySearch(int[] arr, int elem,int low,int high)
{
int mid = (low + high) / 2;
if (low > high) return -1;
else
{
if (arr[mid] > elem)
return BinarySearch(arr, elem, low, mid - 1);
else if (arr[mid] < elem)
return BinarySearch(arr, elem, mid + 1, high);
else
return mid;
}
}
[/code]
(2)迭代方式
public int BinarySearch(int[] arr,int elem)
{
int low=0;
int high=arr.GetUpperBound(0);
int mid;
while (low <= high)
{
mid=(low+high)/2;
if (arr[mid] == elem)
return mid;
if (arr[mid] > elem)
high = mid - 1;
if (arr[mid] < elem)
low = mid + 1;
}
return -1;
}
[/code]
递归与迭代:迭代(一般循环实现)效率更高,递归(调用自己)的层次性更强,让读者更容易理解,但速度不敢恭维。
总结:了解递归和迭代,基础排序和查找算法,为以后的高级算法做准备。
相关文章推荐
- 数据结构&算法学习笔记: 快速排序
- 简单排序算法学习笔记-冒泡排序算法详解
- 数据结构和算法学习笔记
- 数据结构与算法学习笔记——二叉树的初步理解
- 算法学习笔记----第二部分:排序和顺序统计量----第6章、堆排序
- 数据结构之简单算法学习
- 算法学习笔记(二)字符串根据逆序排序
- 数据结构学习笔记0——算法分析
- 算法学习笔记二:插入排序及循环不变式
- [学习笔记]排序算法之冒泡排序
- [算法学习笔记]冒泡排序和选择排序
- Oracle基础知识笔记(4) 简单查询、限定查询、数据的排序
- 【学习笔记----数据结构27-排序】
- 《Delphi 算法与数据结构》学习与感悟[6]: 一个简单的"单向链表"
- PL/SQL 学习笔记(一)----- pl/sql 基本查询与排序
- Oracle笔记(四) 简单查询、限定查询、数据的排序
- 算法设计和数据结构学习_1(一道堆排序作业题)
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- 数据结构与算法学习笔记——数组
- Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例