选择排序
#include<stdio.h>
void select_sort(int data[],int size){
int i,j;
for (i = 1;i < size; ++i){
int pos = i - 1;
for(j = i - 1; j < size; ++j){
if(data[pos] > data[j]){
pos = j;
}
}
if(pos != i - 1){
int tmp;
tmp = data[pos];
data[pos] = data[i - 1];
data[i - 1] = tmp;
}
int k = 0;
for (k = 0;k < size;k++){
printf("%d ",data[k]);
}
printf("\n");
}
}
int main(){
int data[] = {5,3,4,2,1,8,7,6,9,0};
int size = sizeof(data) / sizeof(data[0]);
int i;
for (i = 0; i< size; i++){
printf("%d ",data[i]);
}
printf("\n");
select_sort(data,size);
for (i = 0; i< size; i++){
printf("%d ",data[i]);
}
printf("\n");
}插入排序
#include<stdio.h>
/*
插入排序
*/
void insert_sort(int data[],size_t size){
int i = 1,j;
for (i = 1; i < size; ++i){
int tmp = data[i];
for(j = i; j > 0 && tmp < data[j - 1]; --j){
data[j] = data[j - 1];
}
data[j] = tmp;
// show the change of each time
int k;
for (k = 0; k < size; ++k){
printf("%d ",data[k]);
}
printf("\n");
// show the change of each time
}
}
int main()
{
int data[] = {3,5,2,4,1,9,7,8,6};
size_t size = sizeof(data) / sizeof(data[0]);
int i;
for (i = 0; i < size; ++i){
printf("%d ",data[i]);
}
printf("\n");
insert_sort(data,size);
for (i = 0; i < size; ++i){
printf("%d ",data[i]);
}
printf("\n");
}冒泡排序
#include <stdio.h>
void bubble_sort(int data[], size_t size){
int j,k,i;
for (j = 0; j < size - 1; j++){ // 10个数只需9次遍历,交换到最后
int flag = 0; // 的数字已是最大,就不用比较交换
for (k = 0; k < size - 1; k++){
if(data[k] > data[k + 1]){
int tmp = data[k];
data[k] = data[k + 1];
data[k + 1] = tmp;
flag = 1;
}
}
if (flag == 0){
break;
}
for (i = 0; i < size; ++i){
printf("%d ",data[i]);
}
printf("\n");
}
}
int main()
{
int data[] = {2,5,4,1,3,6,8,9,7,0};
size_t size = sizeof(data) / sizeof(data[0]);
int i;
for (i = 0; i < size; ++i){
printf("%d ",data[i]);
}
printf("\n");
bubble_sort(data,size);
for (i = 0; i < size; ++i){
printf("%d ",data[i]);
}
printf("\n");
return 0;
}快速排序
#include <stdio.h>
int size;
void quick_sort(int data[],int left,int right){
int mid = (left + right) / 2;
int p = mid, pivot = data[mid];
//显示排序时所找的下标
printf("mid = %d %d\n",mid,pivot);
int i = left, j = right;
while(i < j){
for(;!(i >= p || data[i] > pivot);i++);
if (i < p){
data[p] = data[i];
p = i;
}
for(;!(j <= p || data[j] <= pivot);j--);
if(j > p){
data[p] = data[j];
p = j;
}
}
data[p] = pivot;
// 输出每次排序的结果
for (i = 0; i < size; ++i){
printf("%d ",data[i]);
}
printf("\n");
if (p - left > 1){
quick_sort(data,left,p-1);
}
if (right - p > 1)
quick_sort(data,p+1,right);
}
int main()
{
int data[] = {3,2,1,4,7,6,5,8,9};
size = sizeof(data) / sizeof(data[0]);
int i;
// 数组中原有的值进行打印
for (i = 0; i < size; ++i){
printf("%d ",data[i]);
}
printf("\n");
quick_sort(data,0,size - 1);
//排好序后的数组进行打印
for (i = 0; i < size; ++i){
printf("%d ",data[i]);
}
printf("\n");
return 0;
}
线性查找
#include<stdio.h>
int liner_sort(int data[],size_t size,int key){
int i = 0;
for (i =0; i < size; ++i){
if(data[i] == key){
return i;
}
}
return -1;
}
int main()
{
int data[] = {1,3,6,2,4,5,7,8,19};
int key;
size_t size = sizeof(data) / sizeof(data[0]);
size_t i;
for(i = 0;i < size; i++){
printf("%d ",data[i]);
}
printf("\n");
printf("please input the number you want to find.\n");
scanf("%d",&key);
int pos = liner_sort(data,size,key);
if(pos == -1){
printf("the element is missing.\n");
}
else{
printf("the position of %d is at %d\n",key,pos);
}
return 0;
}二分查找
#include <stdio.h>
/*
二分查找算法
(1)注意的是首先先进行排序的操作
(2)若要调用递归,就要看当前完成的函数是否能解决下面所要面对的问题
*/
int binary_sort(int data[],int left,int right,int key){
if (!data || left < 0 || right <0 || left > right ){
return -1;
} // 采用递归的方式解决问题
int beg = left, end = right;
while(beg <= end){
int mid = (beg + end) / 2;
if (data[mid] < key){
return binary_sort(data, mid + 1, right, key);
}else if(data[mid] > key){
return binary_sort(data, left, mid-1, key);
}else {
return mid;
}
}
return -1;
}
int binary(int data[],int left,int right,int key){
if (!data || left < 0 || right < 0 || left > right){
return -1;
} // 采用循环的方式来解决问题
while (left <= right){
int mid = (left + right) / 2;
if(data[mid] == key){
return mid;
}else if(data[mid] < key){
left = mid + 1;
}else {
right = mid - 1;
}
}
return -1;
}
int main()
{
int data[] = {1,2,3,4,5,6,7,8,9}; //调用二分查找注意数组必须有序
int size = sizeof(data) / sizeof(data[0]);
size_t i;
for (i = 0;i < size; i++){
printf("%d ",data[i]);
}
printf("\n");
int key;
printf("please input the number you want to find.\n");
scanf("%d",&key);
int pos = binary(data, 0, size -1,key);
// int pos = binary_sort(data,0,size - 1,key);
if (pos == -1){
printf("we can not find this element.\n");
}
else {
printf("the number of %d is at the %d position.\n",key,pos);
}
}


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



