冒泡排序 & 选择排序 & 折半查找
2016-01-05 07:36
253 查看
冒泡排序
选择排序
二分查找 & 二分插入 & continue的注意点
#include <stdio.h>
#include <stdlib.h>
#define LEN 10
//函数声明...
void toBubbleSort(int * arr, int len, int order);
void toSelectionSort(int * arr, int len, int order);
void toFindKey(int * arr, int key, int len);
int toBinarychop(int * arr, int key, int len);
int insertItemLoc(int * arr, int key, int len);
typedef enum {
descend,
ascend
} Order;
// main 函数
int main(int argc, const char * argv[])
{
int arr[LEN];
int len = sizeof(arr) / sizeof(int);
for (int i = 0; i < len; i++) {
arr[i] = arc4random_uniform(100) * 3; // 0~99
}
// toBubbleSort(arr, len, ascend);
toSelectionSort(arr, len, ascend);
for (int i = 0; i < len; i++) {
printf("index = %d , %d\n", i, arr[i]);
// printf("%d\t",arr[i]);
}
printf("\n");
//****** 无序数组中查找key ****************** stone ***
// int key = 77;
// intdex??
// toFindKey(arr, key, len);
//****** 折半查找 ****************** stone ***
// int key = arc4random_uniform(100) * 3;
// int index = toBinarychop(arr, key, len);
//
// printf("key = %d, index = %d\n", key, index);
//********插入元素, 保持有序 **************** stone ***
int key = arc4random_uniform(100) * 3;
int index = insertItemLoc(arr, key, len);
printf("key = %d, index = %d\n", key, index);
int arrTo[len + 1];
for (int i = 0, j = 0; i < len + 1; i++, j++) {
if (i != index) {
arrTo[i] = arr[j];
}
else {
arrTo[i] = key;
j--;
}
}
for (int i = 0; i < len + 1; i++) {
printf("index = %d , %d\n", i, arrTo[i]);
}
return 0;
}
int insertItemLoc(int * arr, int key, int len)
{
int low = 0;
int high = len - 1;
int mid = 0;
while (low <= high) {
mid = (low + high) / 2; // 注 : mid 需要循环中不断改变, 不能写在外面
if (key < arr[mid]) {
high = mid - 1;
}
else if (key > arr[mid]) {
low = mid + 1;
}
else {
return mid + 1;
}
}
return low;
}
/**
* 二分查找(有序数组中适用)
*
* @param arr 数组
* @param key key
* @param len 数组长度
*
* @return 返回index , -1 表示没找到
*/
int toBinarychop(int * arr, int key, int len)
{
int low = 0;
int high = len - 1;
int mid = 0;
while (low <= high) {
mid = (low + high) / 2; // 注 : mid 需要循环中不断改变, 不能写在外面
if (key < arr[mid]) {
high = mid - 1;
}
else if (key > arr[mid]) {
low = mid + 1;
}
else {
return mid;
}
}
return -1;
}
/**
* 无序数组中查找key
*
* @param arr 数组
* @param key key
* @param len 数组长度
*/
void toFindKey(int * arr, int key, int len)
{
int i = 0;
while (arr[i] != key) {
i++;
if (i == len) {
break;
}
}
if (i == len) {
printf("没找到\n");
}
else {
printf("index = %d\n", i);
}
}
/**
* 选择排序
*
* @param arr 数组
* @param len 数组长度
*/
void toSelectionSort(int * arr, int len, int order)
{
if (order) {
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (arr[i] > arr[j]) {
arr[i] = arr[j] ^ arr[i];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
}
}
else {
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (arr[i] < arr[j]) {
arr[i] = arr[j] ^ arr[i];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
}
}
}
/**
* 冒泡排序
*
* @param arr 数组
* @param len 数组长度
*/
void toBubbleSort(int * arr, int len, int order)
{
if (order) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
arr[j] = arr[j] ^ arr[j + 1];
arr[j + 1] = arr[j] ^ arr[j + 1];
arr[j] = arr[j] ^ arr[j + 1];
}
}
}
}
else {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
arr[j] = arr[j] ^ arr[j + 1];
arr[j + 1] = arr[j] ^ arr[j + 1];
arr[j] = arr[j] ^ arr[j + 1];
}
}
}
}
}
#include <stdio.h> #include <stdlib.h> #define LEN 100 //函数声明... void toBubbleSort(int * arr, int len); // main 函数 int main(int argc, const char * argv[]) { // int arr[] = { 22, 33, 55, 44, 11, 99, 66 }; int arr[LEN]; int len = sizeof(arr) / sizeof(int); for (int i = 0; i < len; i++) { arr[i] = arc4random_uniform(1000); // 0~99 } toBubbleSort(arr, len); for (int i = 0; i < len; i++) { printf("%d\t", arr[i]); } printf("\n"); return 0; } /** * 冒泡排序 * * @param arr 数组 * @param len 数组长度 */ void toBubbleSort(int * arr, int len) { for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { arr[j] = arr[j] ^ arr[j + 1]; arr[j + 1] = arr[j] ^ arr[j + 1]; arr[j] = arr[j] ^ arr[j + 1]; } } } }
选择排序
#include <stdio.h> #include <stdlib.h> #define LEN 100 //函数声明... void toBubbleSort(int * arr, int len, int order); void toSelectionSort(int * arr, int len, int order); typedef enum { descend, ascend } Order; // main 函数 int main(int argc, const char * argv[]) { int arr[LEN]; int len = sizeof(arr) / sizeof(int); for (int i = 0; i < len; i++) { arr[i] = arc4random_uniform(100); // 0~99 } toBubbleSort(arr, len, ascend); // toSelectionSort(arr, len, ascend); for (int i = 0; i < len; i++) { printf("%d\t", arr[i]); } printf("\n"); return 0; } /** * 选择排序 * * @param arr 数组 * @param len 数组长度 */ void toSelectionSort(int * arr, int len, int order) { if (order) { for (int i = 0; i < len - 1; i++) { for (int j = i + 1; j < len; j++) { if (arr[i] > arr[j]) { arr[i] = arr[j] ^ arr[i]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; } } } } else { for (int i = 0; i < len - 1; i++) { for (int j = i + 1; j < len; j++) { if (arr[i] < arr[j]) { arr[i] = arr[j] ^ arr[i]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; } } } } } /** * 冒泡排序 * * @param arr 数组 * @param len 数组长度 */ void toBubbleSort(int * arr, int len, int order) { if (order) { for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { arr[j] = arr[j] ^ arr[j + 1]; arr[j + 1] = arr[j] ^ arr[j + 1]; arr[j] = arr[j] ^ arr[j + 1]; } } } } else { for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - 1 - i; j++) { if (arr[j] < arr[j + 1]) { arr[j] = arr[j] ^ arr[j + 1]; arr[j + 1] = arr[j] ^ arr[j + 1]; arr[j] = arr[j] ^ arr[j + 1]; } } } } }
二分查找 & 二分插入 & continue的注意点
#include <stdio.h>
#include <stdlib.h>
#define LEN 10
//函数声明...
void toBubbleSort(int * arr, int len, int order);
void toSelectionSort(int * arr, int len, int order);
void toFindKey(int * arr, int key, int len);
int toBinarychop(int * arr, int key, int len);
int insertItemLoc(int * arr, int key, int len);
typedef enum {
descend,
ascend
} Order;
// main 函数
int main(int argc, const char * argv[])
{
int arr[LEN];
int len = sizeof(arr) / sizeof(int);
for (int i = 0; i < len; i++) {
arr[i] = arc4random_uniform(100) * 3; // 0~99
}
// toBubbleSort(arr, len, ascend);
toSelectionSort(arr, len, ascend);
for (int i = 0; i < len; i++) {
printf("index = %d , %d\n", i, arr[i]);
// printf("%d\t",arr[i]);
}
printf("\n");
//****** 无序数组中查找key ****************** stone ***
// int key = 77;
// intdex??
// toFindKey(arr, key, len);
//****** 折半查找 ****************** stone ***
// int key = arc4random_uniform(100) * 3;
// int index = toBinarychop(arr, key, len);
//
// printf("key = %d, index = %d\n", key, index);
//********插入元素, 保持有序 **************** stone ***
int key = arc4random_uniform(100) * 3;
int index = insertItemLoc(arr, key, len);
printf("key = %d, index = %d\n", key, index);
int arrTo[len + 1];
for (int i = 0, j = 0; i < len + 1; i++, j++) {
if (i != index) {
arrTo[i] = arr[j];
}
else {
arrTo[i] = key;
j--;
}
}
for (int i = 0; i < len + 1; i++) {
printf("index = %d , %d\n", i, arrTo[i]);
}
return 0;
}
int insertItemLoc(int * arr, int key, int len)
{
int low = 0;
int high = len - 1;
int mid = 0;
while (low <= high) {
mid = (low + high) / 2; // 注 : mid 需要循环中不断改变, 不能写在外面
if (key < arr[mid]) {
high = mid - 1;
}
else if (key > arr[mid]) {
low = mid + 1;
}
else {
return mid + 1;
}
}
return low;
}
/**
* 二分查找(有序数组中适用)
*
* @param arr 数组
* @param key key
* @param len 数组长度
*
* @return 返回index , -1 表示没找到
*/
int toBinarychop(int * arr, int key, int len)
{
int low = 0;
int high = len - 1;
int mid = 0;
while (low <= high) {
mid = (low + high) / 2; // 注 : mid 需要循环中不断改变, 不能写在外面
if (key < arr[mid]) {
high = mid - 1;
}
else if (key > arr[mid]) {
low = mid + 1;
}
else {
return mid;
}
}
return -1;
}
/**
* 无序数组中查找key
*
* @param arr 数组
* @param key key
* @param len 数组长度
*/
void toFindKey(int * arr, int key, int len)
{
int i = 0;
while (arr[i] != key) {
i++;
if (i == len) {
break;
}
}
if (i == len) {
printf("没找到\n");
}
else {
printf("index = %d\n", i);
}
}
/**
* 选择排序
*
* @param arr 数组
* @param len 数组长度
*/
void toSelectionSort(int * arr, int len, int order)
{
if (order) {
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (arr[i] > arr[j]) {
arr[i] = arr[j] ^ arr[i];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
}
}
else {
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (arr[i] < arr[j]) {
arr[i] = arr[j] ^ arr[i];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
}
}
}
/**
* 冒泡排序
*
* @param arr 数组
* @param len 数组长度
*/
void toBubbleSort(int * arr, int len, int order)
{
if (order) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
arr[j] = arr[j] ^ arr[j + 1];
arr[j + 1] = arr[j] ^ arr[j + 1];
arr[j] = arr[j] ^ arr[j + 1];
}
}
}
}
else {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
arr[j] = arr[j] ^ arr[j + 1];
arr[j + 1] = arr[j] ^ arr[j + 1];
arr[j] = arr[j] ^ arr[j + 1];
}
}
}
}
}
相关文章推荐
- Lintcode: Remove Node in Binary Search Tree
- 陶陶摘苹果(0)<P2005_1>
- 【翻译自mos文章】12c中ORAAGENT.BIN进程消耗了大量的内存
- 设计模式(二):工厂方法
- Java遍历JSON
- unity学习笔记2
- 断网小记
- 【翻译自mos文章】Windows平台下的 Oraagent Memory Leak
- Java反射得到属性的值和设置属性的值(转)
- java如何得到GET和POST请求URL和参数列表(转)
- 这是蒟蒻,勾搭神犇(妹子也行)。
- Python Scraping Tools
- 【翻译自mos文章】ACFS 使用inode 架构吗?
- spark内存概述
- 【BLE】CC2541之PWM
- 游戏开发-从零开始 001
- 【翻译自mos文章】私有网络所用的协议 与 Oracle RAC
- 通过DBMS_scheduler定义job,实现DB多线程并行处理
- 关于搜狐焦点房产的数据分析
- filezilla安装