有1,2,3一直到n的無序陣列,排序

2022-08-31 12:57:12 字數 966 閱讀 3601

題目:有1,2,3,..n 的無序整數陣列,求排序演算法。要求時間複雜度 o(n), 空間複雜度o(1)。

分析:對於一般陣列的排序顯然 o(n) 是無法完成的。 既然題目這樣要求,肯定原先的陣列有一定的規律,讓人們去尋找一種機會。

例如:原始陣列: a = [ 10, 6,9, 5,2, 8,4,7,1,3 ] ,如果把它們從小到大排序且應該是 b = [1,2,3,4,5,6,7,8,9,10 ],也就是說: 如果我們觀察 a --> b 的對映關係是: a[i] 在 b 中的位置是 a[i] - 1,即a[i]=b[a[i]-1]

**:

#include#include

using

namespace

std;

void print(int* a, int

n) cout

<

}void fancysort(int* a, intn)}

intmain()

//對陣列(1,2,....一直到n的無序陣列)賦予初始化隨機值

srand(time(0

));

for (int i = 1; i <=n;)

}cout

<< "

the input array:";

print(a, n);

fancysort(a, n);

cout

<< "

排序結果:";

print(a, n);

cout

<

}return0;

}

結果:

有1,2,3一直到n的無序陣列,排序

題目 有1,2,3,n 的無序整數陣列,求排序演算法。時間複雜度 o n 空間複雜度o 1 分析 對於一般陣列的排序顯然 o n 是無法完成的。既然題目這樣要求,肯定原先的陣列有一定的規律,讓人們去尋找一種機會。例如 原始陣列 a 10,6,9,5,2,8,4,7,1,3 如果把它們從小到大排序且應...

無序陣列 的特殊排序

分析 對於一般陣列的排序顯然 o n 是無法完成的。既然題目這樣要求,肯定原先的陣列有一定的規律,讓人們去尋找一種機會。例如 原始陣列 a 10,6,9,5,2,8,4,7,1,3 如果把它們從小到大排序且應該是 b 1,2,3,4,5,6,7,8,9,10 也就是說 如果我們觀察 a b 的對映關...

無序陣列的歸併排序與合併多個有序陣列

1.什麼是歸併排序?歸併排序先把大的陣列的合併問題拆分成多個小的區間,然後兩兩進行合併。核心思想是遞迴 歸併 遞迴 把大區間拆分成無數個小區間 歸併 把兩個小區間合併成乙個大區間 解題思路 遞迴 兩個有序列表的合併 1.案例1 對無序的陣列進行歸併排序 如下 public static void m...