1. 程式人生 > >有1,2,3一直到n的無序陣列,排序

有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 ]

        如果把它們從小到大排序且應該是

         b = [1,2,3,4,5,6,7,8,9,10 ]  

        也就是說: 如果我們觀察 a --> b 的對映關係是:

                    a[ i ] 在 b 中的位置是 b[ a[i] - 1]

#include<iostream>
using namespace std;

void sortoneton(int a[],int n)
{
	for(int i=0;i<n;)
	{
		int temp=a[a[i]-1];
		a[a[i]-1]=a[i];
		a[i]=temp;
	
		if(a[i]==i+1)
			i++;
	}
	for(int i=0;i<n;i++)
		cout<<a[i]<<",";
}

int main()
{
	int a[10]={10,6,9,3,2,5,7,1,8,4};

	sortoneton(a,10);
	
	return 0;
}

相關推薦

123、4個數字能組成多少個互不相同且無重復數字的三位數?都是多少?

無重復 個數 nbsp 宋體 spa 個數字 bsp != 重復數 .程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去掉不滿足條件的排列。 2.程序源代碼: ‘‘‘ for i in range(1,5): for j in range

題目:123、4個數字能組成多少個互不相同且無重複數字的四位數?都是多少?

#include<stdio.h> int main() { int i,j,k,t=0,l; for(i=1;i<5;i++) for(j=1;j<5;j++) for(k=1;k<5;k++) for(l=1;l<5;l+

題目:123、4個數字能組成多少個互不相同且無重複數字的三位數?都是多少?

for迴圈的巢狀輸出即可,不要想太多。 public class Test11 { public static void main(String[] args) { int i,j,k,sum = 0; System.out.print("符合條件的數有:"

Python——123、4個數字能組成多少個互不相同且無重複數字的三位數?都是多少?

用python做一個簡單的數字題,希望多初學者帶來一點點幫助 第一種方式: 1 for x in range(1,5): 2 for y in range(1,5): 3 for z in range(1,5): 4 if (x!=y) and (y

C語言——例項001 123、4個數字能組成多少個互不相同且無重複數字的三位數?都是多少?

/* Name: Copyright: Author: Date: 27/07/17 08:43 Description: 【程式1】題目:有1、2、3、4個數字,能組成多少個互

c語言:123、4個數字能組成多少個互不相同且無重複數字的三位數?打印出來?

有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?打印出來?解:程式:#include<stdio.h>int main(){int i, j, k;int count = 

基礎演算法題(1)—— 題目:123、4個數字能組成多少個互不相同且無重複數字的四位數?

題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的四位數? 分析題目,要求將1,2,3,4四個數字成各個位數不相同且無重複的四位數,可以寫四個for迴圈,每一個迴圈代表一個位數上的數字,即1——4,再定義一個int型的變數count,初始值為

1nn個整數連續異或的值(1 xor 2 xor 3 ... .. xor n)

。。 nbsp 異或 == ... n) 暴力 bsp 連續 暴力推,前12個數如下: 1 3 0 4 1 7 0 8 1 11 0 12 。。。。 所以對於任意的 n 有如下結論: if : n % 4 == 1 ans

java經典題丨123、4四個數字能組成多少個互不相同且無重複數字的三位數?都是多少?

組合成三個互不重複的數字,不難理解,其他的好辦,但是互不重複,就有點難度了,這個是解決本題思路的重點,程式碼如下: public static void main(String[] args) { int x=0,y=0,z=0,count=0; for(x=1;x<=4;

123、4四個數字可以組成多少個互不相同且無重複的三位數?都是多少?

這個題呢,顧名思義,就是說一個三位數的每一位都是1、2、3、4,個位十位百位上的數字不能重複。 程式設計原理很簡單,分別定義三個變數代表個位十位百位,然後使用for迴圈巢狀每一層迴圈代表一位數,如果個位十位百位都不相同,則輸出。 程式如下: #include <s

1!+2!+3!+...+n!=?

而且 可見 階乘 得到 ech 後來 開始 java 運行 編寫一個Java程序輸出1!+2!+3!+……+n!的和? public class GetSumMethod { /** * 利用遞歸寫的一個階乘運算,發

123、4 個數字,能組成多少個互不相同且無重復數字的三位數?都是多 少?

set 復數 集合 form for 依次 sam code 合成 """ 題目:有 1、2、3、4 個數字,能組成多少個互不相同且無重復數字的三位數?都是多 少? """ # 解決思路:三個for循環依次從4個數中取1個 把所有情況都包括 利用集合來去重 samp

遞歸算法:求解1!+2!+3!+...+n!

system pub 般的 計算 求解 pan ati ram span 遞歸算法:求解1!+2!+3!+...+n!。    /** * 遞歸方法計算 1!+2!+3!+4!....+n! * @param number */

輸入n , 計算sum=1!+2!+3!+..........+n!的末6位(不含前導0)。

要求n<=10^6,n!表示前n個正整數之積。如輸入n=10;輸出37913 #include<iostream> #include<math.h> using namespace std; int main() { long lo

123一直到n無序陣列排序

 題目:有1,2,3,..n 的無序整數陣列,求排序演算法。     時間複雜度 O(n) 空間複雜度O(1) 分析:        對於一般陣列的排序顯然 O(n) 是無法完成的。       既然題目這樣要求,肯定原先的陣列有一定的規律,讓人們去尋找一種機會。 例如

ACMNO.11 一個數如果恰好等於它的因子之和這個數就稱為"完數"。 例如6的因子為123而6=1+2+3因此6是"完數"。 程式設計序找出N之內的所有完數並按下面格式輸出其因子

寫在前面,心得感悟~ 程式碼越來越有難度! 這個ACM題,我除錯了 將近50次~ 一個小時! 真的是,年紀輕輕的搞什麼ACM呀! 關於題的解決思路放在下面再寫吧! 題目描述 一個數如果恰好等於它的因子之和,這個數就稱為"完數"。 例如,6的因子為1、2、3,而6=1+2+

ACMNO.38 C語言-報數 n人圍成一圈順序排號。從第1個人開始報數(從13報數)凡報到3的人退出圈子問最後留下的是原來的第幾號的那位。

題目描述 有n人圍成一圈,順序排號。 從第1個人開始報數(從1到3報數),凡報到3的人退出圈子。`在這裡插入程式碼片` 問最後留下的是原來的第幾號的那位。 輸入 初始人數n 輸出 最後一人的初始編號 樣例輸入 3 樣例輸出 2 來源/分類

輸入n個整數找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字則最小的4個數字是1,2,3,4,。

解題思路: 1、最簡單方法,先排序,再取前k個,時間複雜度O(NlogN) class Solution { public: vector<int> GetLeastNumbers