排序

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

 

posted on 2011-09-17 21:32  youngkang  阅读(190)  评论(0)    收藏  举报