冒泡排序
int bubbleSort(int arr[],int len){
int i,j,t;
for(i=0;i<len-1;i++){
for(j=0;j<len-i-1;j++){
if(arr[j]<arr[j+1]){
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
for(i=0;i<10;i++){
printf("%d ",arr[i]);
}
}
int main(){
int arr[10],i,len=10;
for(i=0;i<10;i++){
scanf("%d",&arr[i]);
}
bubbleSort(arr,len);
}
选择排序
int selectSort(int arr[],int len){
int i,j,t,min;
for(i=0;i<len;i++){
min=i;
for(j=i+1;j<len;j++){
if(arr[j]<arr[min]){
min=j;
}
}
if(min!=i){
t=arr[i];
arr[i]=arr[min];
arr[min]=t;
}
}
for(i=0;i<10;i++){
printf("%d ",arr[i]);
}
}
int main(){
int arr[10],i,len=10;
for(i=0;i<10;i++){
scanf("%d",&arr[i]);
}
selectSort(arr,len);
}
直接插入排序
int InsertSort(int arr[],int len){
int i,j,t;
for(i=1;i<len;i++){
t=arr[i];
for(j=i-1;j>=0&&arr[j]<t;j--){
arr[j+1]=arr[j];
}
arr[j+1]=t;
}
for(i=0;i<10;i++){
printf("%d ",arr[i]);
}
}
int main(){
int arr[10],i,len=10;
for(i=0;i<10;i++){
scanf("%d",&arr[i]);
}
InsertSort(arr,len);
}
快速排序
int fun(int a[],int tou,int wei) {
int t=a[tou];
while(tou<wei) {
while(tou<wei&&a[wei]>t) {
wei--;
}
a[tou]=a[wei];
while(tou<wei&&a[tou]<=t) {
tou++;
}
a[wei]=a[tou];
}
a[tou]=t;
return tou;
}
int fun1(int a[],int tou,int wei) {
if(tou<wei){
int d=fun(a,tou,wei);
fun1(a,tou,d-1);
fun1(a,d+1,wei);
}
}
int main() {
int a[10],i,tou=0,wei=9;
for(i=0; i<10; i++) {
scanf("%d",&a[i]);
}
fun1(a,tou,wei);
for(i=0; i<10; i++) {
printf("%d ",a[i]);
}
}
希尔排序
int fun(int a[]) {
int i,j,d,del[3]= {5,2,1},l,t;
for(l=0; l<3; l++) {
d=del[l];
for(i=d; i<10; i++) {
t=a[i];
if(a[i]<a[i-d]) {
for(j=i-d; j>=0&&a[j]>t; j-=d) {
a[j+d]=a[j];
}
a[j+d]=t;
}
}
}
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
}
int main() {
int a[10],i;
for(i=0; i<10; i++) {
scanf("%d",&a[i]);
}
fun(a);
}
二分查找
int fun(int a[],int low,int high,int mid,int key) {
while(low<high) {
mid=(low+high)/2;
if(a[mid]<key) {
low=mid+1;
} else if(a[mid]>key) {
high=mid-1;
} else {
printf("查找成功!下标为:%d",mid);
return 0;
}
}
printf("不存在!");
return -1;
}
int main() {
int a[5];
for(int i=0; i<5; i++) {
scanf("%d",&a[i]);
}
int high=4,low=0;
int mid=(low+high)/2,key;
printf("请输入查找数字:");
scanf("%d",&key);
fun(a,low,high,mid,key);
}
分块查找
int main(){
//原始数据如果分块如果是升序,选择组内的最大值 a[10]
//原始数据如果分块如果是降序,选择组内的最小值 a[10]
int a[10]={9,5,4,2,1,15,12,13,14,17};
//建立索引表(5个数据为一组)
int sy[2]={9,19};
//通过索引表中的数据,确实在第几个区间
// 输入要查找的数据
int n;
printf("请输入要查找的数据:");
scanf("%d",&n);
int i;
//找到数据所在区间
for(i=0;i<2;i++){
if(n<=sy[i]){ //取最大值用<= 取最小值用>=
break;
}
}
if(i==2){
printf("数据不在数组中");
}
else{ //数据在区间内
//找到该区间的起始下标
int j=5*i;
int k;
//遍历区间5个元素,看是否和n相等
for(k=0;k<5;k++){
if(a[j+k]==n){
printf("数据存在!,下标为%d\n",j+k);
return 0;
}
}
printf("数据不在!");
}
}