您的位置:首页 > 其它

冒泡排序 & 选择排序 & 折半查找

2016-01-05 07:36 253 查看
冒泡排序

#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];
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: