一、顺序查找、快速排序、二分查找
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 1000
struct LNode{
int Data[MAXSIZE];
int Last;
};
typedef struct LNode *List;
List Create()
{
List L;
L = (List)malloc(sizeof(struct LNode));
int i,j = 1,ch;
printf("请输入需要处理的数字,按Ctrl+Z结束:\n");
while(scanf("%d",&ch)!=EOF)
{
L->Data[j] = ch;
j++;
}
L->Last = j-1;
return L;
}
void PrintList(List L)
{
int i;
for(i=1;i <= L->Last;i++)
{
printf("Data[%d]=%d\n",i,L->Data[i]);
}
}
int SeqSearch(List L,int K)
{
for(int i=0;i<=L->Last;i++){
if(L->Data[i]==K){
return i;
}
}
return 0;
}
int BinSearch(List L,int K)
{
int left,right,mid;
left=1;
right=L->Last;
while(left<=right){
mid=(left+right)/2;
if(K<L->Data[mid])
right=mid-1;
else if(K>L->Data[mid])
left=mid+1;
else if(K==L->Data[mid])return mid;
}
return 0;
}
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void quicksort(List L,int low,int high){
int first = low;
int last = high;
int key = L->Data[first];
if(low >= high)
return;
while(first < last)
{
while(first < last && L->Data[last] > key) last--;
L->Data[first] = L->Data[last];
while(first < last && L->Data[first] < key) first++;
L->Data[last] = L->Data[first];
}
L->Data[first] = key;
quicksort(L, low, first-1);
quicksort(L, first+1, high);
}
int main()
{
int n,i;
List L = Create();
printf("所创建的顺序表为:\n");
PrintList(L);
int key,index;
printf("\n请输入你要查找的元素key(顺序查找):");
scanf("%d",&key);
index = SeqSearch(L,key);
if(index == 0)
{
printf("查找失败,元素%d不在顺序表内\n",key);
}else{
printf("查找成功,您要查找的%d在顺序表中的第%d个位置\n",key,index);
}
quicksort(L,1,L->Last);
printf("\n对未排序序列进行快速排序的结果为:");
for(i=1;i<=L->Last;i++)
printf("%d ",L->Data[i]);
int key1,index1;
printf("\n请输入您要查找的元素key(二分查找):");
scanf("%d",&key1);
index1 = BinSearch(L,key1);
if(index1 == 0)
{
printf("查找失败,元素%d不在顺序表内",key1);
}
else
{
printf("查找成功,您要查找的%d在顺序表中的第%d个位置",key1,index1);
}
return 0;
}
简单选择排序、直接插入排序、冒泡排序
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 1000
struct LNode{
int Data[MAXSIZE];
int Last;
};
typedef struct LNode *List;
List Create()
{
List L;
L = (List)malloc(sizeof(struct LNode));
int i,j = 0,ch;
printf("请输入需要处理的数字,按Ctrl+Z结束:\n");
while(scanf("%d",&ch)!=EOF)
{
L->Data[j] = ch;
j++;
}
L->Last = j-1;
return L;
}
void PrintList(List L)
{
int i;
for(i=0;i <= L->Last;i++)
{
printf("Data[%d]=%d\n",i,L->Data[i]);
}
}
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void SimpleSelectionSort(List L)
{
for(int i=0;i<=L->Last;i++){
int min=i;
for(int j=i+1;j<=L->Last;j++){
if(L->Data[min]>L->Data[j])
min=j;
}
swap(&L->Data[i],&L->Data[min]);
}
}
void InsertionSort(List L)
{
for(int i=0;i<=L->Last;i++){
int tmp=L->Data[i];
int j;
for(j=i;j>0&&L->Data[j-1]>tmp;j--)
L->Data[j]=L->Data[j-1];
L->Data[j]=tmp;
}
}
void BubbleSort(List L)
{
for(int i=L->Last;i>=0;i--){
for(int j=i;j<L->Last;j++){
if(L->Data[j+1]<L->Data[j]){
swap(&L->Data[j+1],&L->Data[j]);
}
}
}
}
int main()
{
int n,i;
List L = Create();
printf("所创建的顺序表为:\n");
PrintList(L);
BubbleSort(L);
printf("\n对未排序序列进行排序的结果为:");
for(i=0;i<=L->Last;i++)
printf("%d ",L->Data[i]);
return 0;
}