求数组中第k大的数的位置

    xiaoxiao2025-06-18  12

    利用插入排序的思想,求解:#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX 20 //插入排序 void InsertSort(int arr[], int len) { int i, j, tmp; for (i = 1; i < len; i++) { tmp = arr[i]; for (j = i - 1; j >= 0 && arr[j] > tmp; j--) { arr[j + 1] = arr[j]; } arr[j + 1] = tmp; } } //打印字符串 void PrintArr(int arr[], int len) { int i; for (i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { srand((unsigned int)time(NULL)); int a[MAX]; int b[7] = { 0 }; // 假设k=6, 定义一个b[k+1]数组,插入排序中,数据后移,防止越界 int i, j, pos = 0, tmp = a[0]; for (i = 0; i < MAX; i++) { a[i] = rand() % 100; } for (i = 0; i < MAX; i++) { for (j = 5; j >= 0 && b[j] < a[i]; j--) { b[j + 1] = b[j]; //数据后移,填坑 } b[j + 1] = a[i]; } //b[5]即第6大的数,遍历数组,求b[5]对应的下标 for (i = 0; i < MAX; i++) { if (a[i] == b[5]) { pos = i; printf("pos:%d->%d\n", pos, b[5]); } } PrintArr(a, MAX); InsertSort(a, MAX); PrintArr(a, MAX); system("pause"); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-1300087.html
    最新回复(0)