將陣列排序,陣列中所有的負整數出現在正整數前面(時間複雜度為 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。 """ 分析:(手繪,
演算法題:對只含有0,1,2三個元素的陣列排序,時間複雜度O(n)
題目: 將元素均為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 &