1. 程式人生 > >將陣列排序,陣列中所有的負整數出現在正整數前面(時間複雜度為 O(n), 空間複雜度為 O(1)).

將陣列排序,陣列中所有的負整數出現在正整數前面(時間複雜度為 O(n), 空間複雜度為 O(1)).

<pre name="code" class="plain">#include <stdio.h>
#define N 10
void swap (int *a, int i, int j);
int main(void)
{
	int a[N] = {1, -1, -2, 0, -4, -4, -5, 7, 8, -10};
	int i = 0;
	int j = 0;
	int isswap = 0;
	for(i = 0, j = N - 1; i != j;)
	{
		if(isswap == 0)
		{
			if(a[j] < 0)
			{
				isswap = 1;
				continue;  //不需要移動,就替換當前的值
			}
			j--; //如果當前值大於0,則移動下標
		}
		if(isswap == 1)
		{
			if(a[i] >= 0) 
			{
				swap(a, i, j);
				isswap = 0;
			}
			i++;
		}
	}

	for(i = 0; i < N; i++) 
	{
		printf("%4d", a[i]);
	}
	puts("\n");
	return 0;
}

void swap (int *a, int i, int j) 
{
	int temp;
	temp = a[i];
	a[i] = a[j];
	a[j] = temp;
}


相關推薦

陣列排序陣列所有整數出現在整數前面時間複雜 O(n), 空間複雜 O(1).

<pre name="code" class="plain">#include <stdio.h> #define N 10 void swap (int *a, int i,

陣列出現一次的數字時間複雜O(n),空間複雜O(1)的解法

題目:一個整型數組裡除了兩個陣列外,其他的數字都出現了兩次,要找出這兩個數字。      異或運算有一個性質:任何數異或它自己,結果都是0;這樣如果題目變成只有一個數字只出現一次,其他數字均出現兩次,這樣我們從頭到尾異或陣列中的每一個數字,那麼最終的結果就是隻出現一次的數字

1,2,....一直到n的無序陣列,求排序演算法要求時間複雜O(n),空間複雜O(1)

http://blog.csdn.net/dazhong159/article/details/7921527 1、有1,2,....一直到n的無序陣列,求排序演算法,並且要求時間複雜度為O(n),空間複雜度O(1),使用交換,而且一次只能交換兩個數。 #include &

長度n的順序表L編寫一個時間複雜O(n),空間複雜O(1)的演算法該演算法刪除線性表所有X的元素

解法:用K記錄順序表L中不等於X的元素個數,邊掃描L邊統計K,並將不等於X的元素向前放置K位置上,最後修改L長度 void  del_x_1(SqList &L,Elemtype x){ int k=0; for(i=0;i<L.length;i++) {

陣列排序返回陣列值在原陣列的下標序號

  功能:對輸入的陣列進行排序,返回的是,從小到大陣列對應於原陣列的下標(序號) 。比如 1 7 3 2 9  返回:0 3 2 1 4 思想:在函式中動態開闢一個數組,用於儲存下標。初始化的時候為0-(n-1)。陣列值在排序的過程中,下標值也跟著排序。最後返回指向下標陣

陣列排序返回陣列值在原陣列的下標序號 .

功能:對輸入的陣列進行排序,返回的是,從小到大陣列對應於原陣列的下標(序號) 。比如 1 7 3 2 9  返回:0 3 2 1 4 思想:在函式中動態開闢一個數組,用於儲存下標。初始化的時候為0-(n-1)。陣列值在排序的過程中,下標值也跟著排序。最後返回指向下標陣列的

三位數排序陣列排序

三位數簡單排序 給三位數進行排序,三位數排序應該是很簡單的,還是用了一天多的時間,總共掌握了兩種方法,一種是簡單的常規排序,就是每個數都比較一次,然後寫出結果,以下是第一種方法: public class Count { /** * 給出三位數,進行三位數排序

陣列排序物件陣列排序

陣列排序,根據陣列中物件的某一個屬性進行排序 陣列排序  sortlen =[1,9,11,55,3,4] sortlen = sortlen.sort(function(x,y){ return y-x; //從大到小 }) console.log(sortl

leetcode 排序陣列/連結串列 轉換二叉搜尋樹BST,Python實現

思路:不論是陣列還是連結串列,遞迴地找到他的root(即序列的中點),並返回。 1. 將陣列轉換為二叉樹: # Definition for a binary tree node. # class T

翻轉子陣列陣列排序最小翻轉次數

同學給我發的一個筆試題:給定1到n的一個子序列,每次只能翻轉裡面的一個子陣列,問最少需要幾次翻轉可以使得陣列升序排列?簡單概括就是:翻轉子陣列的方法給陣列排序;思路挺簡單的,隨便寫了一個,可以一起討論哈哈package com.baorant; import java.ut

js物件陣列排序name字串排序數字最前然後英文然後中文

/** * 將傳入的陣列根據當前系統語言,按照中文或英文名重新排序,會影響原陣列 * @param list 必填要排序的list * @returns {*} */ export function arraySortByName(list) { if (list === undefin

有一組不同高度的臺階有一個整數陣列表示陣列每個數是臺階的高度當開始下雨了雨水足夠多臺階之間的水坑會積水多少呢? 如下圖可以表示陣列[0,1,0,2,1,0,1,3,2,1,2,1]

這是一道今日頭條的面試題 """ 有一組不同高度的臺階,有一個整數陣列表示,陣列中每個數是臺階的高度,當開始下雨了(雨水足夠多)臺階之間的水坑會積水多少呢? 如下圖,可以表示為陣列[0,1,0,2,1,0,1,3,2,1,2,1],返回積水量6。 """ 分析:(手繪,

演算法題:對只含有012三個元素的陣列排序時間複雜On

題目: 將元素均為0、1、2的陣列排序,時間複雜度O(n)。 思路: 方法1:通過三個下標遍歷一遍實現的方法。 p1從左側開始,指向第一個非1的數字;p3從右側開始,指向第一個非3的數字。 p2從p1開始遍歷,如果是2,p2繼續遍歷,直到p2遇到1或者3 如果遇到

shell獲取字串長度的方法獲取陣列元素個數獲取陣列元素陣列遍歷

有一個變數var,其值為abbbbsdadhkajsd,設它的長度為len,則用shell獲取此字串的長度,方法如下: len=${#var} 有一個數組A=(a b c d e f) ${A[0]}代表陣列A中的第一個元素a, ${A[@]}是陣列A中的全部元素, ${#

雙色球(陣列去重陣列排序Math物件)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <st

陣列排序並返回排序後的陣列對應原陣列的下標(c語言)

#include<stdio.h> #include<stdlib.h> void sort(int* a, int length, int* b) {     int i,j, t1, t;     for(j=0; j<length; j+

原生JS實現的JSON陣列排序關鍵字錨點跳轉到指定內容區

原生JS實現的仿點選錨點對應模組跳轉到指定的位置,錨點關鍵字從模組中取出,去除重複值按照由大到小的順序排序//JSON陣列按指定值進行排序排序,name:排序規則        function jsonSort(jsonarr,name,snum){            //如果陣列<=1,則直接返

指標陣列陣列指標陣列引用

好久不用C++,今天遇到陣列指標又迷糊了,感覺複習一波並記錄下來 陣列引用 定義一個4x3的陣列: int arr[4][3] = { 0,11,22,33,44,55,66,77,88,1,2,3 }; 定義對陣列的引用:ref是一個大小為3的陣列,是對a[0]的引用;

Eclipse安裝lombok專案所有get、set方法報錯

Lombok是能自動接通編輯器和構建工具的一個Java庫。最大的特點是不用再一次寫額外的getter或者equals方法。然而專案已經匯入了lombok-1.16.6.jar,仍然報錯,或者說lombok的jar包沒有生效,經過查閱資料才知道,是lombok外掛沒安裝,查詢其官網能看到安裝方

計數排序傳說時間複雜O(n+k)的排序演算法

基本思想 假設數序列中小於元素a的個數為n,則直接把a放到第n+1個位置上。當存在幾個相同的元素時要做適當的調整,因為不能把所有的元素放到同一個位置上。計數排序假設輸入的元素都是0到k之間的整數。 回到頂部 參考程式碼 #include &