1、冒泡排序、鸡尾酒排序、选择排序、插入排序、快速排序/********
#include<stdio.h>
//冒泡排序
voidMaopao(int a[],int n)
{
int i, j;
for(i = 0; i < n - 1; i++)
{
for(j = 0; j < n - 1 -i; j++)
{
if(a[j] > a[j + 1])
swap(a,j,j+1);
}
}
}
//交换两个数
void Swap(inta[],int i,int j)
{
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
//鸡尾酒排序
voidCockTailSort(int a[],int n)
{
int left = 0,right = n - 1;
int i;
while(left < right)
{
for(i = left; i < right; i++)
{
if(a[i] > a[i + 1])
Swap(a,i,i+1);
}
right--;
for(i = right; i > left; i--)
{
if(a[i - 1] > a[i])
Swap(a,i-1,i);
}
left++;
}
}
//打印函数
void Print(inta[],int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%d",a[i]);
}
printf("\n");
}
//选择排序
void ChooseSort(inta[],int n)
{
int i, j, min;
for(i = 0; i < n - 1; i++)
{
min= i;
for(j = i + 1; j < n; j++)
{
if(a[min] > a[j])
{
min= j;
}
}
if(min != i)
{
Swap(a,min,i);
}
}
}
//插入排序
void InsertSort(inta[],int n)
{
int i,j;
int get;
for(i = 1; i < n; i++)
{
get= a[i];
j= i - 1;
while((j >= 0) && (get <a[j]))
{
a[j + 1] = a[j];
j--;
}
a[j + 1] = get;
}
}
int main()
{
int a[] = {7,6,8,1,0,9,11,17,13,19,20};
int n;
n = sizeof(a) / sizeof(int);
Print(a,n);
//CockTailSort(a,n);
//ChooseSort(a,n);
InsertSort(a,n);
Print(a,n);
return 0;
}
2、顺序查找、折半查找(二分查找):
#include<stdio.h>
int Search(int *str,int len, int key);
int main()
{
int a[5] = {2,56,99,10,43};
int pos;
int find;
int i;
find = 99;
for(i = 0; i < 5; i++)
{
printf("%d ",a[i]);
}
printf("\n");
pos = Search(a,5,find);
printf("the position of %d isno.%d\n",find,pos);
return 0;
}
int Search(int *str,int len ,int key)
{
int i;
for(i = 0; i < len; i++)
{
if(str[i] == key)
{
return i+1;
}
}
}
折半查找(二分查找):
#include<stdio.h>
int HalfSearch(int*str, int len, int find);
int main()
{
int num[10] = {1,2,3,4,5,6,7,8,9,10};
int find;
int pos;
int i;
for(i = 0; i < 10; i++)
{
printf("%d",num[i]);
}
printf("\ninput the num you want tofind:\n");
scanf("%d",&find);
pos = HalfSearch(num,10,find);
printf("the position of %d isno.%d\n",find,pos);
return 0;
}
int HalfSearch(int*str, int len, int find)
{
int low = 0,high = (len - 1),mid;
int i;
while(low <= high)
{
mid = (low + high) / 2;
if(find > str[mid])
{
low = mid + 1;
}
else if(find < str[mid])
{
high = mid - 1;
}
else
{
return (mid + 1);
}
}
return -1;
}
3、二叉排序树的插入、查找、删除:
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
typedef struct Node{
char data;
struct Node *lchild;
struct Node *rchild;
}Tree,*TreePtr;
//前序遍历创建二叉树
voidCreateTree(TreePtr *T)
{
char a;
scanf("%c",&a);
if('#' == a)
{
(*T) = NULL;
return ;
}
(*T) = (TreePtr)malloc(sizeof(Tree));
(*T)->data = a;
CreateTree(&(*T)->lchild);
CreateTree(&(*T)->rchild);
}
//中序遍历
voidMidOrderPrint(TreePtr T)
{
if(T == NULL)
{
return;
}
MidOrderPrint(T->lchild);
printf("%c",T->data);
MidOrderPrint(T->rchild);
return ;
}
//后序遍历
intAfterOrderPrint(TreePtr T)
{
if(NULL == T)
{
returnERROR;
}
AfterOrderPrint(T);
printf("%c",T->data);
AfterOrderPrint(T);
return OK;
}
int main()
{
TreePtr T;
printf("please input preorderdata:\n");
CreateTree(&T);
printf("MidOrderPrint:");
MidOrderPrint(T);
printf("\n");
printf("AfterOrderPrint:\n");
AfterOrderPrint(T);
printf("\n");
return 0;
}
/*****************************************************
查找最小的 k 个元素
题目:输入 n 个整数,输出其中最小的 k 个。
例如输入1,2,3,4,5,6,7和8这8个数字,
则最小的4个数字为1,2,3和4。
*****************************************************/
#include<stdio.h>
#define N 10
void Quick_Sort(ints[], int L, int R)
{
int i, j, x;
if(L < R)
{
i = L;
j = R;
x = s[L];
while(i < j)
{
while((i < j) && (s[j]>= x))
j--;
if(i < j)
s[i++] = s[j];
while((i < j) && (s[i]< x))
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
Quick_Sort(s, L, i - 1);
Quick_Sort(s, i + 1, R);
}
}
int main()
{
int i;
int a[N];
int k;
printf("please input 10numbers!\n");
for(i = 0; i < N; i++)
{
scanf("%d",&a[i]);
}
printf("please input the numbers ofmin!\n");
scanf("%d",&k);
Quick_Sort(a, 0, 9);
for(i = 0; i < 10; i++)
{
printf("%d ",a[i]);
}
printf("\nthe least numbers is:\n");
for(i = 0; i < k; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}