您的位置:首页 > 编程语言 > C语言/C++

黑马程序员_iOS_C语言实现排序、查找和插入

2015-11-17 04:49 453 查看
——- android培训java培训、期待与您交流! ———-

#include <stdio.h>

/**
*  升序交换
*
*  @param a     数组
*  @param front 前一个元素下标
*  @param back  后一个元素下标
*/
void swap_up(int a[],int front,int back){
if (a[front]>a[back]) {
a[front] = a[front]+a[back];
a[back] = a[front] - a[back];
a[front] = a[front] - a[back];
}
}

/**
*  降序交换
*
*  @param a     数组
*  @param front 前一个元素下标
*  @param back  后一个元素下标
*/
void swap_down(int a[],int front,int back){
if (a[front]<a[back]) {
a[front] = a[front]+a[back];
a[back] = a[front] - a[back];
a[front] = a[front] - a[back];
}
}

/**
*  冒泡排序
*  分析:小数上浮大数下沉
*  @param a   数组
*  @param len 数组长度
*/
void bubbleSort(int a[],int len){

for (int i = 0; i<len-1; i++) {
for (int j =0; j<len-1-i; j++) {
swap_up(a, j, j+1);
}
}
printf("\n");
}

/**
*  选择排序
*  分析:选取最小值置于最前
*  @param a   数组
*  @param len 数组长度
*/
void selectSort_min(int a[],int len){
for (int i = 0; i<len - 1; i++) {
for (int j = i+1; j<len; j++) {
swap_up(a, i, j);
}
}
}

/**
*  选择排序
*  分析:选取最大值置于最后
*  @param a   数组
*  @param len 数组长度
*/
void selectSort_max(int a[],int len){
for (int i = len-1; i>=0; i--) {
for (int j = 0; j<i; j++) {
swap_up(a, j, i);
}
}
}

/**
*  折半查找(有序数组)
*  分析:key值与中间数值比较
*  @param a   数组
*  @param len 数组长度
*  @param key 要查的值
*/
int binarySearch(int a[],int len,int key){
int low = 0,high = len-1;
int mid;
while (low<=high) {
mid = (low+high)/2;
if (key>a[mid]) {
low = mid + 1;
}else if (key<a[mid]){
high = mid - 1;
}else{
return mid;
}
}
//没有查找到
return -1;
}

/**
*  折半查找_插入值
*
*  @param a   数组
*  @param len 数组长
*  @param key 插入值
*
*  @return 插入的位置
*/
int binarySearch_insert(int a[],int len,int key){
int low = 0,high = len-1;
int mid;
while (low<=high) {
mid = (low+high)/2;
if (key>a[mid]) {
low = mid + 1;
}else if (key<a[mid]){
high = mid - 1;
}else{
return mid+1;
}
}
//没有查找到
return low;
}

int main(int argc, const char * argv[]) {

//升序排列数组
int a[] = {3,1,5,7,2,12,45,2,3,6,9};
int len = sizeof(a)/sizeof(int);

//排序前
printf("排序前:");
for (int i = 0; i<len; i++) {
printf("%d  ",a[i]);
}
printf("\n");

//排序
//    bubbleSort(a, len);
//    selectSort_min(a, len);
selectSort_max(a, len);

//排序后
printf("排序后:");
for (int i = 0; i<len; i++) {
printf("%d  ",a[i]);
}
printf("\n");

//折半查找
int i = binarySearch(a, len, 4);
printf("%d\n",i);

i = binarySearch_insert(a, len, 11);
printf("%d\n",i);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: