排序
1 查找与表验证
查找策略的效率取决于表中记录的排列顺序,如果记录是按关键字有序排列的,就可以进行高效的查找。
顺序查找
折半查找
2 表验证
表验证实际上是对,一个表中每个关键字作为待查找关键字,对另一个表进行重复查找
两个表list1,list2 关键字分别是list1[i] 和list2[j],表验证能够识别出:
1、list1[i]不在list2中
2、list2[j]不在list[1]中
3、list1[i]=list2[j]
如果list1,list2 是无序的,则复杂度O(n*m)
如果两个表示有序的算法:复杂度(nlogn)即排序时间
while(i<n&&j<m)
{
if(list1[i]<list2[j])
{cout<<list[i]<<"not in list2";i++}
else if(list1[i]==list2[j])
{cout<<list[i]<<"both in list1 and list2";i++;j++;}
else
{cout<<list[j]<<"not in list1";
j++;
}
for(;i<n;i++)
{cout<<list[i]<<"not in list2";}
for(;j<m;j++)
{cout<<list[j]<<"not in list1";}
}
3.排序
排序性质:有序,稳定
分类:外部排序,内部排序
#include <iostream> #include <string> #include <vector> #include <set> using namespace std; #ifndef SORT_H #define SORT_h //排序数据类型是泛型,至少定义类型的operator < template<typename T> void select_sort(T list[],int n); //直接选择排序 template<typename T> void bubble_sort(T list[],int n); //冒泡排序 template<typename T> void insert_sort(T list[],int n); //插入排序 template<typename T> void quick_sort(T list[],int left,int right); //快速排序 template<typename T> void merge_sort(T list[],int n); //归并排序 template<typename T> void merge_sort_rec(T list[],int n); //归并排序递归算法 template<typename T> void heap_sort(T list[],int n); //堆排序 template<typename T> void shell_sort(T list[],int n); //希尔排序 #include "sort.cpp" #endif
浙公网安备 33010602011771号