C語言之排序基礎
排序
1、排序
冒泡
選擇法 排序
程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void paixu_xuanze(int puke[],int count);
int main()
{
int puke[]={9,6,3,5,2,4,7}; //2 6 3 5 9
paixu_xuanze(puke,7);
for(int i=0;i<7;i++)
{
printf("%d\t",puke[i]);
}
return 0;
}
void paixu_xuanze(int puke[],int count)
{
int min_xuhao;
int temp;
int i;
for(int j=0;j<count-1;j++)
{
min_xuhao=j; //0--3
for(i=j+1;i<count;i++) //1--4
{
if(puke[min_xuhao]>puke[i]) //1---4
{
min_xuhao=i;
}
else
{
}
}
if(min_xuhao!=j) //0--3
{
temp=puke[min_xuhao];
puke[min_xuhao]=puke[j];
puke[j]=temp;
}
}
return;
}
插入法排序
9,6,3,5,2,4,7
9,6,3,5,2,4,7
6 9 3 5 2 4 7
6 3 9 5 2 4 7
3 6 9 5 2 4 7
3 5 6 9 2 4 7
2 3 5 6 9 4 7
2 3 4 5 6 9 7
2 3 4 5 6 7 9
程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void paixu_charu(int puke[],int count)
{
int min_xuhao=0;
int temp;
if(puke[0]>puke[1])
{
temp=puke[1];
puke[1]=puke[0];
puke[0]=temp;
}
else
{
;
}
if(puke[1]>puke[2])
{
temp=puke[2];
puke[2]=puke[1];
puke[1]=temp;
}
else
{
;
}
if(puke[0]>puke[1])
{
temp=puke[1];
puke[1]=puke[0];
puke[0]=temp;
}
else
{
;
}
return;
}
int main()
{
int puke[]={9,6,3,5,2,4,7}; //2 6 3 5 9
paixu_charu(puke,7);
for(int i=0;i<7;i++)
{
printf("%d\t",puke[i]);
}
return 0;
}
//完善後的插入排序演算法 程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void paixu_charu(int puke[],int count)
{
int temp;
int i;
int j;
for(j=0;j<4;j++)
{
for(i=j;i>=0;i--) //0-3
{
if(puke[i]>puke[i+1]) //0--1 //1--2 0--1
{
temp=puke[i+1];
puke[i+1]=puke[i];
puke[i]=temp;
}
else
{
break;
}
}
}
return;
}
int main()
{
int puke[]={9,6,3,5,2}; //3 6 9 5 2
paixu_charu(puke,5);
for(int i=0;i<5;i++)
{
printf("%d\t",puke[i]);
}
return 0;
}
查詢:
順序查詢
二分查詢--------
3 6 9 23 56
找 23,如果找到,請返回下標;如果沒找到,返回-1
程式碼:----還需要完善的程式碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int find_binarySearch(int puke[],int count,int data)
{
int pos=-1;
int low=0;
int hign=count-1;
int mid=(low+hign)/2;
if(data==puke[mid])
{
pos=mid;
}
else if(data<puke[mid])
{
pos=find_binarySearch(puke+low,mid,data);
}
else
{
int temp=find_binarySearch(puke+mid+1,count-mid-1,data);
pos=temp+mid+1;
}
return pos;
}
int main()
{
int puke[]={3,6,9,23,56};
int pos=find_binarySearch(puke,5,57);
printf("%d\n",pos);
return 0;
}
//完善後的二分法查詢
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int find_binarySearch(int puke[],int count,int data)
{
if(count<1)
{
return -1;
}
int pos=-1;
int low=0;
int hign=count-1;
int mid=(low+hign)/2;
if(data==puke[mid])
{
pos=mid;
}
else if(data<puke[mid])
{
pos=find_binarySearch(puke+low,mid,data);
}
else
{
int temp=find_binarySearch(puke+mid+1,count-mid-1,data);
if(temp!=-1)
{
pos=temp+mid+1;
}
}
return pos;
}
int main()
{
int puke[]={3,6,9,23,56};
int pos=find_binarySearch(puke,5,56);
printf("%d\n",pos);
return 0;
}