日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

常见排序总结

發布時間:2025/3/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常见排序总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

冒泡

#include <stdio.h>void bubble_sort(int array[], int length);void bubble_sort(int array[], int length) {int i, j, temp;for (i = 0; i < length - 1; i++){for (j = 0; j < length - 1 - i; j++){if (array[j] > array[j + 1]){temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}} }int main(void) {int array[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i, length;length = sizeof(array) / sizeof(array[0]);bubble_sort(array, length);printf("排序后的結果是:");for (i = 0; i < length; i++){printf("%d ", array[i]);}putchar('\n');return 0; }

快排

#include <stdio.h>void quick_sort(int array[], int left, int right);void quick_sort(int array[], int left, int right) {int i = left, j = right;int temp;int pivot;// 基準點設置為中間元素,你也可以選擇其它元素作為基準點pivot = array[(left + right) / 2];while (i <= j){// 找到左邊大于等于基準點的元素while (array[i] < pivot){i++;}// 找到右邊小于等于基準點的元素while (array[j] > pivot){j--;}// 如果左邊下標小于右邊,則互換元素if (i <= j){temp = array[i];array[i] = array[j];array[j] = temp;i++;j--;}}if (left < j){quick_sort(array, left, j);}if (i < right){quick_sort(array, i, right);} }int main(void) {int array[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i, length;length = sizeof(array) / sizeof(array[0]);quick_sort(array, 0, length - 1);printf("排序后的結果是:");for (i = 0; i < length; i++){printf("%d ", array[i]);}putchar('\n');return 0; }

計數排序:

#include <stdio.h> #include <stdlib.h>void counting_sort(int array[], int length);void counting_sort(int array[], int length) {int i, max;int* buffer = NULL;int* sorted = NULL;max = array[0];for (i = 1; i < length; i++){if (array[i] > max){max = array[i];}}buffer = (int*)malloc((max + 1) * sizeof(int));for (i = 0; i < max + 1; i++){buffer[i] = 0;}for (i = 0; i < length; i++){buffer[array[i]]++;}for (i = 1; i < max + 1; i++){buffer[i] += buffer[i - 1];}sorted = (int*)malloc(length * sizeof(int));for (i = length; i > 0; i--){sorted[--buffer[array[i - 1]]] = array[i - 1];}for (i = 0; i < length; i++){array[i] = sorted[i];}free(buffer);free(sorted); }int main(void) {int array[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i, length;length = sizeof(array) / sizeof(array[0]);counting_sort(array, length);printf("排序后的結果是:");for (i = 0; i < length; i++){printf("%d ", array[i]);}putchar('\n');return 0; }

插入排序

#include <stdio.h>void insertion_sort(int array[], int length);void insertion_sort(int array[], int length) {int i, j, temp;for (i = 1; i < length; i++){temp = array[i];j = i - 1;for (; j >= 0 && array[j] > temp; j--){array[j + 1] = array[j];}array[j + 1] = temp;} }int main(void) {int array[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i, length;length = sizeof(array) / sizeof(array[0]);insertion_sort(array, length);printf("排序后的結果是:");for (i = 0; i < length; i++){printf("%d ", array[i]);}putchar('\n');return 0; }

選擇排序

#include <stdio.h>void selection_sort(int array[], int length);void selection_sort(int array[], int length) {int i, j, min, temp;for (i = 0; i < length - 1; i++){min = i;for (j = i + 1; j < length; j++){if (array[min] > array[j]){min = j;}}temp = array[min];array[min] = array[i];array[i] = temp;} }int main(void) {int array[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i, length;length = sizeof(array) / sizeof(array[0]);selection_sort(array, length);printf("排序后的結果是:");for (i = 0; i < length; i++){printf("%d ", array[i]);}putchar('\n');return 0; }

希爾排序

#include <stdio.h>void shell_sort(int array[], int length);void shell_sort(int array[], int length) {int i, j, step, temp;for (step = length / 2; step > 0; step /= 2){for (i = step; i < length; i++){temp = array[i];for (j = i - step; j >= 0 && array[j] > temp; j -= step){array[j + step] = array[j];}array[j + step] = temp;}} }int main(void) {int array[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i, length;length = sizeof(array) / sizeof(array[0]);shell_sort(array, length);printf("排序后的結果是:");for (i = 0; i < length; i++){printf("%d ", array[i]);}putchar('\n');return 0; }

歸并排序

#include <stdio.h>void merge_sort(int array[], int length); void merge_sort_recursive(int array[], int reg[], int start, int end);void merge_sort_recursive(int array[], int reg[], int start, int end) {if (start >= end){return;}int k = start;int length = end - start;int mid = (length / 2) + start;int start1 = start, end1 = mid;int start2 = mid + 1, end2 = end;merge_sort_recursive(array, reg, start1, end1);merge_sort_recursive(array, reg, start2, end2);while (start1 <= end1 && start2 <= end2){reg[k++] = array[start1] < array[start2] ? array[start1++] : array[start2++];}while (start1 <= end1){reg[k++] = array[start1++];}while (start2 <= end2){reg[k++] = array[start2++];}for (k = start; k <= end; k++){array[k] = reg[k];} }void merge_sort(int array[], int length) {int reg[14];merge_sort_recursive(array, reg, 0, length - 1); }int main(void) {int array[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i, length;length = sizeof(array) / sizeof(array[0]);merge_sort(array, length);printf("排序后的結果是:");for (i = 0; i < length; i++){printf("%d ", array[i]);}putchar('\n');return 0; }

雞尾酒排序

#include <stdio.h>void cocktail_sort(int array[], int length);void cocktail_sort(int array[], int length) {int i, left = 0, right = length - 1;int temp;while (left < right){for (i = left; i < right; i++){if (array[i] > array[i + 1]){temp = array[i];array[i] = array[i + 1];array[i + 1] = temp;}}right--;for (i = right; i > left; i--){if (array[i - 1] > array[i]){temp = array[i];array[i] = array[i - 1];array[i - 1] = temp;}}left++;} }int main(void) {int array[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i, length;length = sizeof(array) / sizeof(array[0]);cocktail_sort(array, length);printf("排序后的結果是:");for (i = 0; i < length; i++){printf("%d ", array[i]);}putchar('\n');return 0; }

桶排序

#include <stdio.h> #include <stdlib.h>int* add_item(int* array, int count, int item); void bucket_sort(int array[], int length);struct Bucket {int* data;int count; };int* add_item(int* array, int count, int item) {int* newArray = (int*)malloc(sizeof(int) * (count + 1));int i;for (i = 0; i < count; i++){newArray[i] = array[i];}newArray[count] = item;return newArray; }void bucket_sort(int array[], int length) {int min = array[0];int max = array[0];int i, j, k, cap, size;struct Bucket* bucket = NULL;struct Bucket b;for (i = 1; i < length; i++){if (array[i] > max){max = array[i];}if (array[i] < min){min = array[i];}}cap = max - min + 1;bucket = (struct Bucket*)malloc(sizeof(struct Bucket) * cap);for (i = 0; i < cap; i++){bucket[i] = *(struct Bucket*)malloc(sizeof(struct Bucket));}for (i = 0; i < length; i++){b = bucket[array[i] - min];if (b.count < 0){b.count = 0;}bucket[array[i] - min].data = add_item(b.data, b.count++, array[i]);bucket[array[i] - min].count = b.count;}for (i = 0, k = 0; i < cap; i++){size = bucket[i].count;if (size > 0){for (j = 0; j < size; j++){array[k] = bucket[i].data[j];k++;}}} }int main(void) {int array[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i, length;length = sizeof(array) / sizeof(array[0]);bucket_sort(array, length);printf("排序后的結果是:");for (i = 0; i < length; i++){printf("%d ", array[i]);}putchar('\n');return 0; }

心形 圖案

#include <stdio.h> #include <math.h> #include <stdlib.h> #define I 20 #define R 340 int main() {int i, j, e;int a;long time;system("title 尋夢SSS");for (i = 1, a = I; i < I / 2; i++, a--){for (j = (int)(I - sqrt(I * I - (a - i) * (a - i))); j > 0; j--)printf(" ");for (e = 1; e <= 2 * sqrt(I * I - (a - i) * (a - i)); e++)printf("\3");for (j = (int)(2 * (I - sqrt(I * I - (a - i) * (a - i)))); j > 0; j--)printf(" ");for (e = 1; e <= 2 * sqrt(I * I - (a - i) * (a - i)); e++)printf("\3");printf("\n");}for (i = 1; i < 80; i++){if (i == 25){printf(" 一路向前沖沖沖!!!!!!!");i += 30;}printf("\3");}printf("\n");for (i = 1; i <= R / 2; i++){if (i % 2 || i % 3)continue;for (j = (int)(R - sqrt(R * R - i * i)); j > 0; j--)printf(" ");for (e = 1; e <= 2 * (sqrt(R * R - i * i) - (R - 2 * I)); e++)printf("\3");printf("\n");}for (; ; ){system("color a");for (time = 0; time < 99999999; time++); system("color b");for (time = 0; time < 99999999; time++); system("color c");for (time = 0; time < 99999999; time++); system("color d");for (time = 0; time < 99999999; time++); system("color e");for (time = 0; time < 99999999; time++); system("color f");for (time = 0; time < 99999999; time++);system("color 0"); for (time = 0; time < 99999999; time++);system("color 1"); for (time = 0; time < 99999999; time++);system("color 2"); for (time = 0; time < 99999999; time++);system("color 3"); for (time = 0; time < 99999999; time++);system("color 4");for (time = 0; time < 99999999; time++); system("color 5");for (time = 0; time < 99999999; time++); system("color 6");for (time = 0; time < 99999999; time++); system("color 7");for (time = 0; time < 99999999; time++); system("color 8");for (time = 0; time < 99999999; time++); system("color 9");for (time = 0; time < 99999999; time++); system("color ab");for (time = 0; time < 99999999; time++); system("color ac");for (time = 0; time < 99999999; time++); system("color ad");for (time = 0; time < 99999999; time++); system("color ae");for (time = 0; time < 99999999; time++); system("color af");for (time = 0; time < 99999999; time++);}return 0; }

總結

以上是生活随笔為你收集整理的常见排序总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。