//直接插入排序
public void InsertSort(int[] L){
for(int i=1;i<L.length;i++)
if(L[i]<L[i-1]){
int t = L[i], j; //t用来临时存放当前所指数
L[i]=L[i-1];
for(j=i-2;(j>=0)&&(t<L[j]);j--)
L[j+1]=L[j];
L[j+1]=t;
}
}
//折半插入排序
public void BInsertSort(int[] L){
for(int i=1;i<L.length;i++)
if(L[i]<L[i-1]){
int t=L[i];
int low = 0,high=i-1, j;
while(low<=high){
int mid = (low+high)/2;
if(t<L[mid]) high = mid -1;
else low = mid+1;
}//while循环用来找插入点
for(j=i-1;j>high;j--)
L[j+1]=L[j];
L[j+1]=t;
}//for
}
//Shell排序
public void ShellSort(int[] L){
int dk = L.length/2;
while(dk>0){
for(int i=dk;i<L.length;i++)
if(L[i]<L[i-dk]){
int t=L[i], j;
for(j=i-dk;j>=0&&t<L[j];j-=dk)
L[j+dk]=L[j];
L[j+dk]=t;
}
dk/=2;
}//while
}
//冒泡排序
public void BubbleSort(int[] L){
for(int i=0;i<L.length-1;i++)
for(int j=0;j<L.length-i-1;j++)
if(L[j]>L[j+1])
{
int t=L[j];
L[j]=L[j+1];
L[j+1]=t;
}
}
//快速排序
public void QuickSort(int[] L,int low,int high){
if(low<high){
int pivotkey = L[low];
int i=low,j=high;
while(i<j){
while(i<j&&L[j]>=pivotkey) j--;
if(i<j)
L[i++]=L[j];
while(i<j&&L[i]<=pivotkey) i++;
if(i<j)
L[j--]=L[i];
}//while
L[i]=pivotkey;
QuickSort(L,low,j-1);
QuickSort(L,i+1,high);
}//if
}
//选择排序
public void SelectSort(int[] L){
for(int i=0;i<L.length;i++){
int minloc=i;
for(int j=i;j<L.length;j++){
if(L[minloc]>L[j])
minloc=j;
}
if(i!=minloc){
int tmp;
tmp=L[minloc];
L[minloc]=L[i];
L[i]=tmp;
}
}
}
//堆排序
public void HeapAdjust(int[] L,int s,int m){
int t,j;
t=L[s]; //备份元素L[s],为其找到适当位置后再插入
for(j=2*s+1;j<=m;j=j*2+1){ //沿值较大的孩子结点向下筛选
if(j<m&&L[j]<L[j+1]) j++; //j是值较大的元素的下标
if(t>=L[j]) break;
L[s]=L[j]; //用s记录待插入元素的位置
s=j;
}//for
L[s]=t; //将备份元素插入由s所指出的插入位置
}
public void HeapSort(int[] L){
int i,t;
for(i=L.length/2-1;i>=0;i--) //把L[0...n]调整为大根堆
HeapAdjust(L,i,L.length-1);
for(i=L.length-1;i>0;i--){ //堆顶元素L[0]与序列的最后元素L[i]交换
t=L[0];
L[0]=L[i];
L[i]=t;
HeapAdjust(L,0,i-1);
}//for
}
public static void main(String[] args){
SortMethod test = new SortMethod();
final int MAX = 10;
int[] n = new int[MAX];
System.out.println("Before Sort:");
for(int i=0;i<n.length;i++)
{
n[i]=(int)(Math.random()*MAX);
System.out.print(n[i]+" ");
}
test.SelectSort(n);
System.out.println("\nAfter Sort:");
for(int i=0;i<n.length;i++)
System.out.print(n[i]+" ");
}
}
1. 冒泡法排序:
for (i=0;i<N;i++)
for(j=i+1;j<N;i++)
if (a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
2.韵年的判定方法
int main()
{
int year;
bool leap;
cout<<"please enter year:";
cin>>year;
if (year%4==0)
{if(year%100==0)
{if (year%400==0)
leap=true;
else leap=false;}
else
leap=true;}
else
leap=false;
if (leap)
cout<<year<<" is ";
else
cout<<year<<" is not ";
cout<<" a leap year."<<endl;
return 0;
}
3.保留小数点后4位数字,注意头文件中包含iomanip;
#include<iostream>
#include<iomanip>
using namespace std;
void main()
{
double a=22.0,b=7.0;
cout<<setiosflags(ios::scientific)<<setprecision(4)<<a/b<<endl;
}
4. cout.put(*(a+i)); 等效于: cout<<*(a+i);
5.#include <iostream>
using namespace std;
int main()
{void convert(int n);
int number;
cout<<"input an integer:";
cin>>number;
cout<<"output:"<<endl;
if (number<0)
{cout<<"-";
number=-number;
}
convert(number);
cout<<endl;
return 0;
}
void convert(int n) //求数n的各位数字,并分别输出,n可为负数
{int i;
char c;
if ((i=n/10)!=0)
convert(i);
c=n%10+'0';
cout<<" "<<c;
}
6.求字符串长度算法
int fun(char *s)
{ char *p=s;
while(*p!='\0')p++;
return (p-s);
}
7.求数组a[]的前n项之和;
template<class T>
T Rsum(T a[],int n)
{
if(n>0)
return Rsum(a,n-1)+a[n-1];
return 0;
}
7.将数组A中每隔20个数字,求和求其平均值,按从小到大排列在数组B中!!
void Sample::funSort(Sample &s)
{
int i, j = 0, cnt = 0 ;
double val = 0.0 ;
for(i = 0 ; i < Max ; i++) {
cnt++ ;
val += s.A[i] ;
if(cnt % 20 == 0) {
s.B[j++] = val / 20. ;
val = 0 ;
}
}
for(i = 0 ; i < 10 ; i++)
for( j = i + 1 ; j < 10 ; j ++)
if(s.B[i] > s.B[j]) {
val = s.B[i] ;
s.B[i] = s.B[j] ;
s.B[j] = val ;
}
}
8.统计数组A中的数十位数字是2,4,8的数个数toCnt,以及求出所有不满足条件的数的算术平均值;
void Sample::calValue(Sample &s)
{
int i, sw ;
double he = 0.0 ;
for(i = 0 ; i < Max ; i++) {
sw = (s.A[i] % 100) / 10 ;
if(sw == 2 || sw == 4 || sw == 8) s.totCnt++ ;
else he = he + s.A[i] ;
}
s.totPjz = he / (160 - s.totCnt) ;
}
9.//汉诺塔问题
#include<iostream>
using namespace std;
void hanoi(int ,int ,int,int);
int main()
{
int j;
cout<<"输入盘子数量:";
cin>>j;
hanoi(j,1,2,3);
return 0;
}
void hanoi(int n,int p1,int p2,int p3)
{
if(n==1)
cout<<"盘子从"<<p1<<"移到"<<p3<<endl;
else
{
hanoi(n-1,p1,p3,p2);
cout<<"盘子从"<<p1<<"移到"<<p3<<endl;
hanoi(n-1,p2,p1,p3);
}
}
10. 本题主要考查了归并排序算法。对两个已排好的线性表进行排序时,只要依次从两个表的表头开始遍历,如果表1的当前值小于表2的当前值,则将表1的记录推进1位,否则推进表2的记录,直到某个表遍历结束,然后将未遍历完的顺序表中的其余记录复制到新表中即可。在本题中,分配了一个临时的存储空间。参考代码如下:
void SortedList::mergeFrom(const SortedList& list){ //将 list 合并到当前有序数据表中
double *t=new double[len+list.len];
int i=0,j=0;
while(i<len&&j<list.len)
{
if(d[i]<list.d[j])
t[i+j]=d[i++];
else
t[i+j]=list.d[j++];
}
if(i==len)
for(int k=j;k<list.len;++k)
t[i+k]=list.d[k];
else
for(int k=i;k<len;++k)
t[j+k]=d[k];
delete []d;
d=t;
len+=list.len;
}
11. int MyString::wordCount() const
{
char*s=str;
int n=0;
bool flag;
flag=false;
while(*s)
{
if(*s>'a'&&*s<'z'||*s>'A'&&*s<'Z')
flag=true;
else
if(*s=='\0'||*s==' ')
{ n++;
flag=false;}
s++;
}
if(flag=true)++n;
return n;
}
4289

被折叠的 条评论
为什么被折叠?



